From b56b6640e6aab7d35e670acafbcc6e03f7a07bd8 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sun, 29 May 2016 11:58:33 +0200 Subject: [PATCH] mac80211: backport ath9k GPIO support --- ...s-with-prohibited-blackholed-source.patch} | 0 ...tallation-of-headers-for-host-build.patch} | 0 ...alloc-instead-of-oom-kill-processes.patch} | 0 ...=> 0013-fix-UBNT-XM-model-detection.patch} | 0 ...iles-implemented-basic-GPIO-control.patch} | 0 ...pin-for-Ubiquiti-Nanostation-models.patch} | 0 ...-netifd-update-to-latest-git-master.patch} | 0 ...port_bootpart-for-Xen-virtual-disks.patch} | 0 ...ort-LibreSSL-as-provider-of-openssl.patch} | 0 ...WREV-on-upgrades-of-TP-LINK-devices.patch} | 0 ...-space-on-some-TP-LINK-like-devices.patch} | 0 ...X_MODEL-to-match-labels-image-names.patch} | 0 ...71xx-build-image-for-TL-WR710N-v2.1.patch} | 0 ...gure-compatiblity-with-POSIX-shells.patch} | 0 ...as-only-added-in-the-latest-version.patch} | 0 ...ompile-flock-before-everything-else.patch} | 0 ...fall-back-to-unlocked-shell-command.patch} | 0 ...e-conditions-with-multiple-variants.patch} | 0 ...x-packed-checkout-mirroring-support.patch} | 0 ...-backport-spi-nor-driver-from-4.4.9.patch} | 0 ...il-status-register-writes-are-ready.patch} | 0 ...l-mtd-spi-nor-unlock-Winbond-flashs.patch} | 0 ...ols-pkg-config-fix-build-with-GCC-6.patch} | 0 ...inux-compiler-.h-with-u-boot-master.patch} | 0 ...-toolchain-gcc-fix-build-with-GCC-6.patch} | 0 ...561-set-phy-interface-mode-and-mask.patch} | 0 ...on-register-bitmask-for-QCA956x-SoC.patch} | 0 ... 0037-ar71xx-update-QCA956x-support.patch} | 0 ...r-QCA956x-ethernet.patch-into-files.patch} | 0 ...r71xx-fix-MDIO-bus-probe-on-QCA956x.patch} | 0 ...fix-qca956x-ethernet-initialization.patch} | 0 ...pport-for-Ubiquiti-UniFi-AP-AC-LITE.patch} | 0 ...h0-support-for-Ubiquiti-UniFi-AP-AC.patch} | 0 ...71xx-Rename-unifiac-to-unifiac-lite.patch} | 0 ...upport-for-Ubiquiti-UniFi-AP-AC-PRO.patch} | 0 ...upgrade-images-for-OpenMesh-devices.patch} | 0 ...pport-for-the-OpenMesh-MR1750-board.patch} | 0 ...pport-for-the-OpenMesh-MR1750-board.patch} | 0 ...g-gen.sh-add-support-for-the-MR1750.patch} | 0 ...-sysupgrade-for-the-OpenMesh-MR1750.patch} | 0 ...atchdog-add-OpenMesh-MR1750-support.patch} | 0 ...nvtools-add-OpenMesh-MR1750-support.patch} | 0 ...image-for-the-OpenMesh-MR1750-board.patch} | 0 ...of-bits-in-QCA955X_GMAC_REG_ETH_CFG.patch} | 0 ...g-helper-for-Open-Mesh-MR900-boards.patch} | 0 ...ath79_gpio_output_select-on-QCA955x.patch} | 0 ...for-ath79_gpio_function_-on-QCA955X.patch} | 0 ...X-GPIO-mux-and-function-definitions.patch} | 0 ...-Use-PHY-fixups-for-Open-Mesh-MR900.patch} | 0 ...Use-PHY-fixups-for-Open-Mesh-MR1750.patch} | 0 ...h79_setup_qca955x_eth_cfg-for-MR900.patch} | 0 ...79_setup_qca955x_eth_cfg-for-MR1750.patch} | 0 ...en.sh-Fix-u-boot-image-md5sum-check.patch} | 0 ...te-sha256sum-for-uboot-verification.patch} | 0 ...port-for-the-OpenMesh-OM5P-AC-board.patch} | 0 ...ce-support-for-the-OpenMesh-OM5P-AC.patch} | 0 ...-gen.sh-add-support-for-the-OM5P-AC.patch} | 0 ...sysupgrade-for-the-OpenMesh-OM5P-AC.patch} | 0 ...tchdog-add-OpenMesh-OM5P-AC-support.patch} | 0 ...vtools-add-OpenMesh-OM5P-AC-support.patch} | 0 ....bin-for-the-OpenMesh-OM5P-AC-board.patch} | 0 ...mage-for-the-OpenMesh-OM5P-AC-board.patch} | 0 ...rt-for-the-OpenMesh-OM5P-ACv2-board.patch} | 0 ...-support-for-the-OpenMesh-OM5P-ACv2.patch} | 0 ...supgrade-for-the-OpenMesh-OM5P-ACv2.patch} | 0 ...hdog-add-OpenMesh-OM5P-ACv2-support.patch} | 0 ...ools-add-OpenMesh-OM5P-ACv2-support.patch} | 0 ...in-for-the-OpenMesh-OM5P-ACv2-board.patch} | 0 ...dd-OM5P-ACv2-to-the-OM5P-AC-profile.patch} | 0 ...r-custom-format-strings-for-doubles.patch} | 0 ...-ath9k-enable-platform-WLAN-LED-name.patch | 121 +++ ...-set-default-state-for-platform-LEDs.patch | 47 + ...mac80211-ath9k-enable-access-to-GPIO.patch | 261 ++++++ .../openwrt/0083-mac80211-refresh-patch.patch | 30 + ...4-mac80211-ath9k-enable-GPIO-buttons.patch | 259 ++++++ ...-on-platforms-without-CONFIG_GPIOLIB.patch | 827 ++++++++++++++++++ ...uner-support-for-UniFi-Outdoor-Plus.patch} | 43 +- 77 files changed, 1562 insertions(+), 26 deletions(-) rename patches/openwrt/{0011-ipv6-fix-crash-on-ICMPv6-redirects-with-prohibited-blackholed-source.patch => 0010-ipv6-fix-crash-on-ICMPv6-redirects-with-prohibited-blackholed-source.patch} (100%) rename patches/openwrt/{0012-lua-fix-installation-of-headers-for-host-build.patch => 0011-lua-fix-installation-of-headers-for-host-build.patch} (100%) rename patches/openwrt/{0013-kernel-fs-seq_file-fallback-to-vmalloc-instead-of-oom-kill-processes.patch => 0012-kernel-fs-seq_file-fallback-to-vmalloc-instead-of-oom-kill-processes.patch} (100%) rename patches/openwrt/{0014-fix-UBNT-XM-model-detection.patch => 0013-fix-UBNT-XM-model-detection.patch} (100%) rename patches/openwrt/{0015-base-files-implemented-basic-GPIO-control.patch => 0014-base-files-implemented-basic-GPIO-control.patch} (100%) rename patches/openwrt/{0016-ar71xx-assign-proper-GPIO-pin-for-Ubiquiti-Nanostation-models.patch => 0015-ar71xx-assign-proper-GPIO-pin-for-Ubiquiti-Nanostation-models.patch} (100%) rename patches/openwrt/{0017-netifd-update-to-latest-git-master.patch => 0016-netifd-update-to-latest-git-master.patch} (100%) rename patches/openwrt/{0018-x86-fix-platform_export_bootpart-for-Xen-virtual-disks.patch => 0017-x86-fix-platform_export_bootpart-for-Xen-virtual-disks.patch} (100%) rename patches/openwrt/{0019-Support-LibreSSL-as-provider-of-openssl.patch => 0018-Support-LibreSSL-as-provider-of-openssl.patch} (100%) rename patches/openwrt/{0020-ar71xx-check-both-HWID-and-HWREV-on-upgrades-of-TP-LINK-devices.patch => 0019-ar71xx-check-both-HWID-and-HWREV-on-upgrades-of-TP-LINK-devices.patch} (100%) rename patches/openwrt/{0021-ar71xx-avoid-AR71XX_MODEL-ending-with-a-space-on-some-TP-LINK-like-devices.patch => 0020-ar71xx-avoid-AR71XX_MODEL-ending-with-a-space-on-some-TP-LINK-like-devices.patch} (100%) rename patches/openwrt/{0022-ar71xx-fix-the-revision-of-a-few-TP-LINK-devices-in-AR71XX_MODEL-to-match-labels-image-names.patch => 0021-ar71xx-fix-the-revision-of-a-few-TP-LINK-devices-in-AR71XX_MODEL-to-match-labels-image-names.patch} (100%) rename patches/openwrt/{0023-ar71xx-build-image-for-TL-WR710N-v2.1.patch => 0022-ar71xx-build-image-for-TL-WR710N-v2.1.patch} (100%) rename patches/openwrt/{0024-xtables-addons-build-fix-configure-compatiblity-with-POSIX-shells.patch => 0023-xtables-addons-build-fix-configure-compatiblity-with-POSIX-shells.patch} (100%) rename patches/openwrt/{0025-tools-add-tar-host-build-required-for-sort-name-which-was-only-added-in-the-latest-version.patch => 0024-tools-add-tar-host-build-required-for-sort-name-which-was-only-added-in-the-latest-version.patch} (100%) rename patches/openwrt/{0026-tools-compile-flock-before-everything-else.patch => 0025-tools-compile-flock-before-everything-else.patch} (100%) rename patches/openwrt/{0027-rules.mk-make-the-locked-template-available-even-if-flock-has-not-been-built-yet-fall-back-to-unlocked-shell-command.patch => 0026-rules.mk-make-the-locked-template-available-even-if-flock-has-not-been-built-yet-fall-back-to-unlocked-shell-command.patch} (100%) rename patches/openwrt/{0028-build-add-locking-for-downloads-fixes-race-conditions-with-multiple-variants.patch => 0027-build-add-locking-for-downloads-fixes-race-conditions-with-multiple-variants.patch} (100%) rename patches/openwrt/{0029-download.mk-fix-packed-checkout-mirroring-support.patch => 0028-download.mk-fix-packed-checkout-mirroring-support.patch} (100%) rename patches/openwrt/{0030-kernel-backport-spi-nor-driver-from-4.4.9.patch => 0029-kernel-backport-spi-nor-driver-from-4.4.9.patch} (100%) rename patches/openwrt/{0031-kernel-mtd-spi-nor-wait-until-status-register-writes-are-ready.patch => 0030-kernel-mtd-spi-nor-wait-until-status-register-writes-are-ready.patch} (100%) rename patches/openwrt/{0032-kernel-mtd-spi-nor-unlock-Winbond-flashs.patch => 0031-kernel-mtd-spi-nor-unlock-Winbond-flashs.patch} (100%) rename patches/openwrt/{0033-tools-pkg-config-fix-build-with-GCC-6.patch => 0032-tools-pkg-config-fix-build-with-GCC-6.patch} (100%) rename patches/openwrt/{0034-tools-mkimage-sync-include-linux-compiler-.h-with-u-boot-master.patch => 0033-tools-mkimage-sync-include-linux-compiler-.h-with-u-boot-master.patch} (100%) rename patches/openwrt/{0035-toolchain-gcc-fix-build-with-GCC-6.patch => 0034-toolchain-gcc-fix-build-with-GCC-6.patch} (100%) rename patches/openwrt/{0036-ath79-dev-eth-fix-QCA9561-set-phy-interface-mode-and-mask.patch => 0035-ath79-dev-eth-fix-QCA9561-set-phy-interface-mode-and-mask.patch} (100%) rename patches/openwrt/{0037-ar71xx-use-correct-PLL-configuration-register-bitmask-for-QCA956x-SoC.patch => 0036-ar71xx-use-correct-PLL-configuration-register-bitmask-for-QCA956x-SoC.patch} (100%) rename patches/openwrt/{0038-ar71xx-update-QCA956x-support.patch => 0037-ar71xx-update-QCA956x-support.patch} (100%) rename patches/openwrt/{0039-ar71xx-fold-patch-622-MIPS-ath79-add-support-for-QCA956x-ethernet.patch-into-files.patch => 0038-ar71xx-fold-patch-622-MIPS-ath79-add-support-for-QCA956x-ethernet.patch-into-files.patch} (100%) rename patches/openwrt/{0040-ar71xx-fix-MDIO-bus-probe-on-QCA956x.patch => 0039-ar71xx-fix-MDIO-bus-probe-on-QCA956x.patch} (100%) rename patches/openwrt/{0041-ar71xx-fix-qca956x-ethernet-initialization.patch => 0040-ar71xx-fix-qca956x-ethernet-initialization.patch} (100%) rename patches/openwrt/{0042-ar71xx-Support-for-Ubiquiti-UniFi-AP-AC-LITE.patch => 0041-ar71xx-Support-for-Ubiquiti-UniFi-AP-AC-LITE.patch} (100%) rename patches/openwrt/{0043-ar71xx-Fix-eth0-support-for-Ubiquiti-UniFi-AP-AC.patch => 0042-ar71xx-Fix-eth0-support-for-Ubiquiti-UniFi-AP-AC.patch} (100%) rename patches/openwrt/{0044-ar71xx-Rename-unifiac-to-unifiac-lite.patch => 0043-ar71xx-Rename-unifiac-to-unifiac-lite.patch} (100%) rename patches/openwrt/{0045-ar71xx-Add-support-for-Ubiquiti-UniFi-AP-AC-PRO.patch => 0044-ar71xx-Add-support-for-Ubiquiti-UniFi-AP-AC-PRO.patch} (100%) rename patches/openwrt/{0046-ar71xx-Generate-sysupgrade-images-for-OpenMesh-devices.patch => 0045-ar71xx-Generate-sysupgrade-images-for-OpenMesh-devices.patch} (100%) rename patches/openwrt/{0047-ar71xx-add-kernel-support-for-the-OpenMesh-MR1750-board.patch => 0046-ar71xx-add-kernel-support-for-the-OpenMesh-MR1750-board.patch} (100%) rename patches/openwrt/{0048-ar71xx-add-user-space-support-for-the-OpenMesh-MR1750-board.patch => 0047-ar71xx-add-user-space-support-for-the-OpenMesh-MR1750-board.patch} (100%) rename patches/openwrt/{0049-scripts-om-fwupgradecfg-gen.sh-add-support-for-the-MR1750.patch => 0048-scripts-om-fwupgradecfg-gen.sh-add-support-for-the-MR1750.patch} (100%) rename patches/openwrt/{0050-ar71xx-enable-sysupgrade-for-the-OpenMesh-MR1750.patch => 0049-ar71xx-enable-sysupgrade-for-the-OpenMesh-MR1750.patch} (100%) rename patches/openwrt/{0051-package-om-watchdog-add-OpenMesh-MR1750-support.patch => 0050-package-om-watchdog-add-OpenMesh-MR1750-support.patch} (100%) rename patches/openwrt/{0052-package-uboot-envtools-add-OpenMesh-MR1750-support.patch => 0051-package-uboot-envtools-add-OpenMesh-MR1750-support.patch} (100%) rename patches/openwrt/{0053-ar71xx-create-profile-and-build-image-for-the-OpenMesh-MR1750-board.patch => 0052-ar71xx-create-profile-and-build-image-for-the-OpenMesh-MR1750-board.patch} (100%) rename patches/openwrt/{0054-ar71xx-Extend-the-list-of-bits-in-QCA955X_GMAC_REG_ETH_CFG.patch => 0053-ar71xx-Extend-the-list-of-bits-in-QCA955X_GMAC_REG_ETH_CFG.patch} (100%) rename patches/openwrt/{0055-ar71xx-Use-_eth_cfg-helper-for-Open-Mesh-MR900-boards.patch => 0054-ar71xx-Use-_eth_cfg-helper-for-Open-Mesh-MR900-boards.patch} (100%) rename patches/openwrt/{0056-ar71xx-Allow-to-use-ath79_gpio_output_select-on-QCA955x.patch => 0055-ar71xx-Allow-to-use-ath79_gpio_output_select-on-QCA955x.patch} (100%) rename patches/openwrt/{0057-ar71xx-Add-support-for-ath79_gpio_function_-on-QCA955X.patch => 0056-ar71xx-Add-support-for-ath79_gpio_function_-on-QCA955X.patch} (100%) rename patches/openwrt/{0058-ar71xx-Add-QCA955X-GPIO-mux-and-function-definitions.patch => 0057-ar71xx-Add-QCA955X-GPIO-mux-and-function-definitions.patch} (100%) rename patches/openwrt/{0059-ar71xx-Use-PHY-fixups-for-Open-Mesh-MR900.patch => 0058-ar71xx-Use-PHY-fixups-for-Open-Mesh-MR900.patch} (100%) rename patches/openwrt/{0060-ar71xx-Use-PHY-fixups-for-Open-Mesh-MR1750.patch => 0059-ar71xx-Use-PHY-fixups-for-Open-Mesh-MR1750.patch} (100%) rename patches/openwrt/{0061-ar71xx-Use-private-version-of-ath79_setup_qca955x_eth_cfg-for-MR900.patch => 0060-ar71xx-Use-private-version-of-ath79_setup_qca955x_eth_cfg-for-MR900.patch} (100%) rename patches/openwrt/{0062-ar71xx-Use-private-version-of-ath79_setup_qca955x_eth_cfg-for-MR1750.patch => 0061-ar71xx-Use-private-version-of-ath79_setup_qca955x_eth_cfg-for-MR1750.patch} (100%) rename patches/openwrt/{0063-scripts-om-fwupgradecfg-gen.sh-Fix-u-boot-image-md5sum-check.patch => 0062-scripts-om-fwupgradecfg-gen.sh-Fix-u-boot-image-md5sum-check.patch} (100%) rename patches/openwrt/{0064-scripts-om-fwupgradecfg-gen.sh-Generate-sha256sum-for-uboot-verification.patch => 0063-scripts-om-fwupgradecfg-gen.sh-Generate-sha256sum-for-uboot-verification.patch} (100%) rename patches/openwrt/{0065-ar71xx-add-kernel-support-for-the-OpenMesh-OM5P-AC-board.patch => 0064-ar71xx-add-kernel-support-for-the-OpenMesh-OM5P-AC-board.patch} (100%) rename patches/openwrt/{0066-ar71xx-add-user-space-support-for-the-OpenMesh-OM5P-AC.patch => 0065-ar71xx-add-user-space-support-for-the-OpenMesh-OM5P-AC.patch} (100%) rename patches/openwrt/{0067-scripts-om-fwupgradecfg-gen.sh-add-support-for-the-OM5P-AC.patch => 0066-scripts-om-fwupgradecfg-gen.sh-add-support-for-the-OM5P-AC.patch} (100%) rename patches/openwrt/{0068-ar71xx-enable-sysupgrade-for-the-OpenMesh-OM5P-AC.patch => 0067-ar71xx-enable-sysupgrade-for-the-OpenMesh-OM5P-AC.patch} (100%) rename patches/openwrt/{0069-om-watchdog-add-OpenMesh-OM5P-AC-support.patch => 0068-om-watchdog-add-OpenMesh-OM5P-AC-support.patch} (100%) rename patches/openwrt/{0070-uboot-envtools-add-OpenMesh-OM5P-AC-support.patch => 0069-uboot-envtools-add-OpenMesh-OM5P-AC-support.patch} (100%) rename patches/openwrt/{0071-ar71xx-extract-ath10k-wifi-board.bin-for-the-OpenMesh-OM5P-AC-board.patch => 0070-ar71xx-extract-ath10k-wifi-board.bin-for-the-OpenMesh-OM5P-AC-board.patch} (100%) rename patches/openwrt/{0072-ar71xx-create-profile-and-build-image-for-the-OpenMesh-OM5P-AC-board.patch => 0071-ar71xx-create-profile-and-build-image-for-the-OpenMesh-OM5P-AC-board.patch} (100%) rename patches/openwrt/{0073-ar71xx-add-kernel-support-for-the-OpenMesh-OM5P-ACv2-board.patch => 0072-ar71xx-add-kernel-support-for-the-OpenMesh-OM5P-ACv2-board.patch} (100%) rename patches/openwrt/{0074-ar71xx-add-user-space-support-for-the-OpenMesh-OM5P-ACv2.patch => 0073-ar71xx-add-user-space-support-for-the-OpenMesh-OM5P-ACv2.patch} (100%) rename patches/openwrt/{0075-ar71xx-enable-sysupgrade-for-the-OpenMesh-OM5P-ACv2.patch => 0074-ar71xx-enable-sysupgrade-for-the-OpenMesh-OM5P-ACv2.patch} (100%) rename patches/openwrt/{0076-om-watchdog-add-OpenMesh-OM5P-ACv2-support.patch => 0075-om-watchdog-add-OpenMesh-OM5P-ACv2-support.patch} (100%) rename patches/openwrt/{0077-uboot-envtools-add-OpenMesh-OM5P-ACv2-support.patch => 0076-uboot-envtools-add-OpenMesh-OM5P-ACv2-support.patch} (100%) rename patches/openwrt/{0078-ar71xx-extract-ath10k-wifi-board.bin-for-the-OpenMesh-OM5P-ACv2-board.patch => 0077-ar71xx-extract-ath10k-wifi-board.bin-for-the-OpenMesh-OM5P-ACv2-board.patch} (100%) rename patches/openwrt/{0079-ar71xx-add-OM5P-ACv2-to-the-OM5P-AC-profile.patch => 0078-ar71xx-add-OM5P-ACv2-to-the-OM5P-AC-profile.patch} (100%) rename patches/openwrt/{0080-libjson-c-Add-support-for-custom-format-strings-for-doubles.patch => 0079-libjson-c-Add-support-for-custom-format-strings-for-doubles.patch} (100%) create mode 100644 patches/openwrt/0080-mac80211-ath9k-enable-platform-WLAN-LED-name.patch create mode 100644 patches/openwrt/0081-mac80211-ath9k-set-default-state-for-platform-LEDs.patch create mode 100644 patches/openwrt/0082-mac80211-ath9k-enable-access-to-GPIO.patch create mode 100644 patches/openwrt/0083-mac80211-refresh-patch.patch create mode 100644 patches/openwrt/0084-mac80211-ath9k-enable-GPIO-buttons.patch create mode 100644 patches/openwrt/0085-mac80211-rework-gpio-chip-button-support-to-build-on-platforms-without-CONFIG_GPIOLIB.patch rename patches/openwrt/{0010-ath9k-add-HSR-tuner-support-for-UniFi-Outdoor-Plus.patch => 0086-ath9k-add-HSR-tuner-support-for-UniFi-Outdoor-Plus.patch} (93%) diff --git a/patches/openwrt/0011-ipv6-fix-crash-on-ICMPv6-redirects-with-prohibited-blackholed-source.patch b/patches/openwrt/0010-ipv6-fix-crash-on-ICMPv6-redirects-with-prohibited-blackholed-source.patch similarity index 100% rename from patches/openwrt/0011-ipv6-fix-crash-on-ICMPv6-redirects-with-prohibited-blackholed-source.patch rename to patches/openwrt/0010-ipv6-fix-crash-on-ICMPv6-redirects-with-prohibited-blackholed-source.patch diff --git a/patches/openwrt/0012-lua-fix-installation-of-headers-for-host-build.patch b/patches/openwrt/0011-lua-fix-installation-of-headers-for-host-build.patch similarity index 100% rename from patches/openwrt/0012-lua-fix-installation-of-headers-for-host-build.patch rename to patches/openwrt/0011-lua-fix-installation-of-headers-for-host-build.patch diff --git a/patches/openwrt/0013-kernel-fs-seq_file-fallback-to-vmalloc-instead-of-oom-kill-processes.patch b/patches/openwrt/0012-kernel-fs-seq_file-fallback-to-vmalloc-instead-of-oom-kill-processes.patch similarity index 100% rename from patches/openwrt/0013-kernel-fs-seq_file-fallback-to-vmalloc-instead-of-oom-kill-processes.patch rename to patches/openwrt/0012-kernel-fs-seq_file-fallback-to-vmalloc-instead-of-oom-kill-processes.patch diff --git a/patches/openwrt/0014-fix-UBNT-XM-model-detection.patch b/patches/openwrt/0013-fix-UBNT-XM-model-detection.patch similarity index 100% rename from patches/openwrt/0014-fix-UBNT-XM-model-detection.patch rename to patches/openwrt/0013-fix-UBNT-XM-model-detection.patch diff --git a/patches/openwrt/0015-base-files-implemented-basic-GPIO-control.patch b/patches/openwrt/0014-base-files-implemented-basic-GPIO-control.patch similarity index 100% rename from patches/openwrt/0015-base-files-implemented-basic-GPIO-control.patch rename to patches/openwrt/0014-base-files-implemented-basic-GPIO-control.patch diff --git a/patches/openwrt/0016-ar71xx-assign-proper-GPIO-pin-for-Ubiquiti-Nanostation-models.patch b/patches/openwrt/0015-ar71xx-assign-proper-GPIO-pin-for-Ubiquiti-Nanostation-models.patch similarity index 100% rename from patches/openwrt/0016-ar71xx-assign-proper-GPIO-pin-for-Ubiquiti-Nanostation-models.patch rename to patches/openwrt/0015-ar71xx-assign-proper-GPIO-pin-for-Ubiquiti-Nanostation-models.patch diff --git a/patches/openwrt/0017-netifd-update-to-latest-git-master.patch b/patches/openwrt/0016-netifd-update-to-latest-git-master.patch similarity index 100% rename from patches/openwrt/0017-netifd-update-to-latest-git-master.patch rename to patches/openwrt/0016-netifd-update-to-latest-git-master.patch diff --git a/patches/openwrt/0018-x86-fix-platform_export_bootpart-for-Xen-virtual-disks.patch b/patches/openwrt/0017-x86-fix-platform_export_bootpart-for-Xen-virtual-disks.patch similarity index 100% rename from patches/openwrt/0018-x86-fix-platform_export_bootpart-for-Xen-virtual-disks.patch rename to patches/openwrt/0017-x86-fix-platform_export_bootpart-for-Xen-virtual-disks.patch diff --git a/patches/openwrt/0019-Support-LibreSSL-as-provider-of-openssl.patch b/patches/openwrt/0018-Support-LibreSSL-as-provider-of-openssl.patch similarity index 100% rename from patches/openwrt/0019-Support-LibreSSL-as-provider-of-openssl.patch rename to patches/openwrt/0018-Support-LibreSSL-as-provider-of-openssl.patch diff --git a/patches/openwrt/0020-ar71xx-check-both-HWID-and-HWREV-on-upgrades-of-TP-LINK-devices.patch b/patches/openwrt/0019-ar71xx-check-both-HWID-and-HWREV-on-upgrades-of-TP-LINK-devices.patch similarity index 100% rename from patches/openwrt/0020-ar71xx-check-both-HWID-and-HWREV-on-upgrades-of-TP-LINK-devices.patch rename to patches/openwrt/0019-ar71xx-check-both-HWID-and-HWREV-on-upgrades-of-TP-LINK-devices.patch diff --git a/patches/openwrt/0021-ar71xx-avoid-AR71XX_MODEL-ending-with-a-space-on-some-TP-LINK-like-devices.patch b/patches/openwrt/0020-ar71xx-avoid-AR71XX_MODEL-ending-with-a-space-on-some-TP-LINK-like-devices.patch similarity index 100% rename from patches/openwrt/0021-ar71xx-avoid-AR71XX_MODEL-ending-with-a-space-on-some-TP-LINK-like-devices.patch rename to patches/openwrt/0020-ar71xx-avoid-AR71XX_MODEL-ending-with-a-space-on-some-TP-LINK-like-devices.patch diff --git a/patches/openwrt/0022-ar71xx-fix-the-revision-of-a-few-TP-LINK-devices-in-AR71XX_MODEL-to-match-labels-image-names.patch b/patches/openwrt/0021-ar71xx-fix-the-revision-of-a-few-TP-LINK-devices-in-AR71XX_MODEL-to-match-labels-image-names.patch similarity index 100% rename from patches/openwrt/0022-ar71xx-fix-the-revision-of-a-few-TP-LINK-devices-in-AR71XX_MODEL-to-match-labels-image-names.patch rename to patches/openwrt/0021-ar71xx-fix-the-revision-of-a-few-TP-LINK-devices-in-AR71XX_MODEL-to-match-labels-image-names.patch diff --git a/patches/openwrt/0023-ar71xx-build-image-for-TL-WR710N-v2.1.patch b/patches/openwrt/0022-ar71xx-build-image-for-TL-WR710N-v2.1.patch similarity index 100% rename from patches/openwrt/0023-ar71xx-build-image-for-TL-WR710N-v2.1.patch rename to patches/openwrt/0022-ar71xx-build-image-for-TL-WR710N-v2.1.patch diff --git a/patches/openwrt/0024-xtables-addons-build-fix-configure-compatiblity-with-POSIX-shells.patch b/patches/openwrt/0023-xtables-addons-build-fix-configure-compatiblity-with-POSIX-shells.patch similarity index 100% rename from patches/openwrt/0024-xtables-addons-build-fix-configure-compatiblity-with-POSIX-shells.patch rename to patches/openwrt/0023-xtables-addons-build-fix-configure-compatiblity-with-POSIX-shells.patch diff --git a/patches/openwrt/0025-tools-add-tar-host-build-required-for-sort-name-which-was-only-added-in-the-latest-version.patch b/patches/openwrt/0024-tools-add-tar-host-build-required-for-sort-name-which-was-only-added-in-the-latest-version.patch similarity index 100% rename from patches/openwrt/0025-tools-add-tar-host-build-required-for-sort-name-which-was-only-added-in-the-latest-version.patch rename to patches/openwrt/0024-tools-add-tar-host-build-required-for-sort-name-which-was-only-added-in-the-latest-version.patch diff --git a/patches/openwrt/0026-tools-compile-flock-before-everything-else.patch b/patches/openwrt/0025-tools-compile-flock-before-everything-else.patch similarity index 100% rename from patches/openwrt/0026-tools-compile-flock-before-everything-else.patch rename to patches/openwrt/0025-tools-compile-flock-before-everything-else.patch diff --git a/patches/openwrt/0027-rules.mk-make-the-locked-template-available-even-if-flock-has-not-been-built-yet-fall-back-to-unlocked-shell-command.patch b/patches/openwrt/0026-rules.mk-make-the-locked-template-available-even-if-flock-has-not-been-built-yet-fall-back-to-unlocked-shell-command.patch similarity index 100% rename from patches/openwrt/0027-rules.mk-make-the-locked-template-available-even-if-flock-has-not-been-built-yet-fall-back-to-unlocked-shell-command.patch rename to patches/openwrt/0026-rules.mk-make-the-locked-template-available-even-if-flock-has-not-been-built-yet-fall-back-to-unlocked-shell-command.patch diff --git a/patches/openwrt/0028-build-add-locking-for-downloads-fixes-race-conditions-with-multiple-variants.patch b/patches/openwrt/0027-build-add-locking-for-downloads-fixes-race-conditions-with-multiple-variants.patch similarity index 100% rename from patches/openwrt/0028-build-add-locking-for-downloads-fixes-race-conditions-with-multiple-variants.patch rename to patches/openwrt/0027-build-add-locking-for-downloads-fixes-race-conditions-with-multiple-variants.patch diff --git a/patches/openwrt/0029-download.mk-fix-packed-checkout-mirroring-support.patch b/patches/openwrt/0028-download.mk-fix-packed-checkout-mirroring-support.patch similarity index 100% rename from patches/openwrt/0029-download.mk-fix-packed-checkout-mirroring-support.patch rename to patches/openwrt/0028-download.mk-fix-packed-checkout-mirroring-support.patch diff --git a/patches/openwrt/0030-kernel-backport-spi-nor-driver-from-4.4.9.patch b/patches/openwrt/0029-kernel-backport-spi-nor-driver-from-4.4.9.patch similarity index 100% rename from patches/openwrt/0030-kernel-backport-spi-nor-driver-from-4.4.9.patch rename to patches/openwrt/0029-kernel-backport-spi-nor-driver-from-4.4.9.patch diff --git a/patches/openwrt/0031-kernel-mtd-spi-nor-wait-until-status-register-writes-are-ready.patch b/patches/openwrt/0030-kernel-mtd-spi-nor-wait-until-status-register-writes-are-ready.patch similarity index 100% rename from patches/openwrt/0031-kernel-mtd-spi-nor-wait-until-status-register-writes-are-ready.patch rename to patches/openwrt/0030-kernel-mtd-spi-nor-wait-until-status-register-writes-are-ready.patch diff --git a/patches/openwrt/0032-kernel-mtd-spi-nor-unlock-Winbond-flashs.patch b/patches/openwrt/0031-kernel-mtd-spi-nor-unlock-Winbond-flashs.patch similarity index 100% rename from patches/openwrt/0032-kernel-mtd-spi-nor-unlock-Winbond-flashs.patch rename to patches/openwrt/0031-kernel-mtd-spi-nor-unlock-Winbond-flashs.patch diff --git a/patches/openwrt/0033-tools-pkg-config-fix-build-with-GCC-6.patch b/patches/openwrt/0032-tools-pkg-config-fix-build-with-GCC-6.patch similarity index 100% rename from patches/openwrt/0033-tools-pkg-config-fix-build-with-GCC-6.patch rename to patches/openwrt/0032-tools-pkg-config-fix-build-with-GCC-6.patch diff --git a/patches/openwrt/0034-tools-mkimage-sync-include-linux-compiler-.h-with-u-boot-master.patch b/patches/openwrt/0033-tools-mkimage-sync-include-linux-compiler-.h-with-u-boot-master.patch similarity index 100% rename from patches/openwrt/0034-tools-mkimage-sync-include-linux-compiler-.h-with-u-boot-master.patch rename to patches/openwrt/0033-tools-mkimage-sync-include-linux-compiler-.h-with-u-boot-master.patch diff --git a/patches/openwrt/0035-toolchain-gcc-fix-build-with-GCC-6.patch b/patches/openwrt/0034-toolchain-gcc-fix-build-with-GCC-6.patch similarity index 100% rename from patches/openwrt/0035-toolchain-gcc-fix-build-with-GCC-6.patch rename to patches/openwrt/0034-toolchain-gcc-fix-build-with-GCC-6.patch diff --git a/patches/openwrt/0036-ath79-dev-eth-fix-QCA9561-set-phy-interface-mode-and-mask.patch b/patches/openwrt/0035-ath79-dev-eth-fix-QCA9561-set-phy-interface-mode-and-mask.patch similarity index 100% rename from patches/openwrt/0036-ath79-dev-eth-fix-QCA9561-set-phy-interface-mode-and-mask.patch rename to patches/openwrt/0035-ath79-dev-eth-fix-QCA9561-set-phy-interface-mode-and-mask.patch diff --git a/patches/openwrt/0037-ar71xx-use-correct-PLL-configuration-register-bitmask-for-QCA956x-SoC.patch b/patches/openwrt/0036-ar71xx-use-correct-PLL-configuration-register-bitmask-for-QCA956x-SoC.patch similarity index 100% rename from patches/openwrt/0037-ar71xx-use-correct-PLL-configuration-register-bitmask-for-QCA956x-SoC.patch rename to patches/openwrt/0036-ar71xx-use-correct-PLL-configuration-register-bitmask-for-QCA956x-SoC.patch diff --git a/patches/openwrt/0038-ar71xx-update-QCA956x-support.patch b/patches/openwrt/0037-ar71xx-update-QCA956x-support.patch similarity index 100% rename from patches/openwrt/0038-ar71xx-update-QCA956x-support.patch rename to patches/openwrt/0037-ar71xx-update-QCA956x-support.patch diff --git a/patches/openwrt/0039-ar71xx-fold-patch-622-MIPS-ath79-add-support-for-QCA956x-ethernet.patch-into-files.patch b/patches/openwrt/0038-ar71xx-fold-patch-622-MIPS-ath79-add-support-for-QCA956x-ethernet.patch-into-files.patch similarity index 100% rename from patches/openwrt/0039-ar71xx-fold-patch-622-MIPS-ath79-add-support-for-QCA956x-ethernet.patch-into-files.patch rename to patches/openwrt/0038-ar71xx-fold-patch-622-MIPS-ath79-add-support-for-QCA956x-ethernet.patch-into-files.patch diff --git a/patches/openwrt/0040-ar71xx-fix-MDIO-bus-probe-on-QCA956x.patch b/patches/openwrt/0039-ar71xx-fix-MDIO-bus-probe-on-QCA956x.patch similarity index 100% rename from patches/openwrt/0040-ar71xx-fix-MDIO-bus-probe-on-QCA956x.patch rename to patches/openwrt/0039-ar71xx-fix-MDIO-bus-probe-on-QCA956x.patch diff --git a/patches/openwrt/0041-ar71xx-fix-qca956x-ethernet-initialization.patch b/patches/openwrt/0040-ar71xx-fix-qca956x-ethernet-initialization.patch similarity index 100% rename from patches/openwrt/0041-ar71xx-fix-qca956x-ethernet-initialization.patch rename to patches/openwrt/0040-ar71xx-fix-qca956x-ethernet-initialization.patch diff --git a/patches/openwrt/0042-ar71xx-Support-for-Ubiquiti-UniFi-AP-AC-LITE.patch b/patches/openwrt/0041-ar71xx-Support-for-Ubiquiti-UniFi-AP-AC-LITE.patch similarity index 100% rename from patches/openwrt/0042-ar71xx-Support-for-Ubiquiti-UniFi-AP-AC-LITE.patch rename to patches/openwrt/0041-ar71xx-Support-for-Ubiquiti-UniFi-AP-AC-LITE.patch diff --git a/patches/openwrt/0043-ar71xx-Fix-eth0-support-for-Ubiquiti-UniFi-AP-AC.patch b/patches/openwrt/0042-ar71xx-Fix-eth0-support-for-Ubiquiti-UniFi-AP-AC.patch similarity index 100% rename from patches/openwrt/0043-ar71xx-Fix-eth0-support-for-Ubiquiti-UniFi-AP-AC.patch rename to patches/openwrt/0042-ar71xx-Fix-eth0-support-for-Ubiquiti-UniFi-AP-AC.patch diff --git a/patches/openwrt/0044-ar71xx-Rename-unifiac-to-unifiac-lite.patch b/patches/openwrt/0043-ar71xx-Rename-unifiac-to-unifiac-lite.patch similarity index 100% rename from patches/openwrt/0044-ar71xx-Rename-unifiac-to-unifiac-lite.patch rename to patches/openwrt/0043-ar71xx-Rename-unifiac-to-unifiac-lite.patch diff --git a/patches/openwrt/0045-ar71xx-Add-support-for-Ubiquiti-UniFi-AP-AC-PRO.patch b/patches/openwrt/0044-ar71xx-Add-support-for-Ubiquiti-UniFi-AP-AC-PRO.patch similarity index 100% rename from patches/openwrt/0045-ar71xx-Add-support-for-Ubiquiti-UniFi-AP-AC-PRO.patch rename to patches/openwrt/0044-ar71xx-Add-support-for-Ubiquiti-UniFi-AP-AC-PRO.patch diff --git a/patches/openwrt/0046-ar71xx-Generate-sysupgrade-images-for-OpenMesh-devices.patch b/patches/openwrt/0045-ar71xx-Generate-sysupgrade-images-for-OpenMesh-devices.patch similarity index 100% rename from patches/openwrt/0046-ar71xx-Generate-sysupgrade-images-for-OpenMesh-devices.patch rename to patches/openwrt/0045-ar71xx-Generate-sysupgrade-images-for-OpenMesh-devices.patch diff --git a/patches/openwrt/0047-ar71xx-add-kernel-support-for-the-OpenMesh-MR1750-board.patch b/patches/openwrt/0046-ar71xx-add-kernel-support-for-the-OpenMesh-MR1750-board.patch similarity index 100% rename from patches/openwrt/0047-ar71xx-add-kernel-support-for-the-OpenMesh-MR1750-board.patch rename to patches/openwrt/0046-ar71xx-add-kernel-support-for-the-OpenMesh-MR1750-board.patch diff --git a/patches/openwrt/0048-ar71xx-add-user-space-support-for-the-OpenMesh-MR1750-board.patch b/patches/openwrt/0047-ar71xx-add-user-space-support-for-the-OpenMesh-MR1750-board.patch similarity index 100% rename from patches/openwrt/0048-ar71xx-add-user-space-support-for-the-OpenMesh-MR1750-board.patch rename to patches/openwrt/0047-ar71xx-add-user-space-support-for-the-OpenMesh-MR1750-board.patch diff --git a/patches/openwrt/0049-scripts-om-fwupgradecfg-gen.sh-add-support-for-the-MR1750.patch b/patches/openwrt/0048-scripts-om-fwupgradecfg-gen.sh-add-support-for-the-MR1750.patch similarity index 100% rename from patches/openwrt/0049-scripts-om-fwupgradecfg-gen.sh-add-support-for-the-MR1750.patch rename to patches/openwrt/0048-scripts-om-fwupgradecfg-gen.sh-add-support-for-the-MR1750.patch diff --git a/patches/openwrt/0050-ar71xx-enable-sysupgrade-for-the-OpenMesh-MR1750.patch b/patches/openwrt/0049-ar71xx-enable-sysupgrade-for-the-OpenMesh-MR1750.patch similarity index 100% rename from patches/openwrt/0050-ar71xx-enable-sysupgrade-for-the-OpenMesh-MR1750.patch rename to patches/openwrt/0049-ar71xx-enable-sysupgrade-for-the-OpenMesh-MR1750.patch diff --git a/patches/openwrt/0051-package-om-watchdog-add-OpenMesh-MR1750-support.patch b/patches/openwrt/0050-package-om-watchdog-add-OpenMesh-MR1750-support.patch similarity index 100% rename from patches/openwrt/0051-package-om-watchdog-add-OpenMesh-MR1750-support.patch rename to patches/openwrt/0050-package-om-watchdog-add-OpenMesh-MR1750-support.patch diff --git a/patches/openwrt/0052-package-uboot-envtools-add-OpenMesh-MR1750-support.patch b/patches/openwrt/0051-package-uboot-envtools-add-OpenMesh-MR1750-support.patch similarity index 100% rename from patches/openwrt/0052-package-uboot-envtools-add-OpenMesh-MR1750-support.patch rename to patches/openwrt/0051-package-uboot-envtools-add-OpenMesh-MR1750-support.patch diff --git a/patches/openwrt/0053-ar71xx-create-profile-and-build-image-for-the-OpenMesh-MR1750-board.patch b/patches/openwrt/0052-ar71xx-create-profile-and-build-image-for-the-OpenMesh-MR1750-board.patch similarity index 100% rename from patches/openwrt/0053-ar71xx-create-profile-and-build-image-for-the-OpenMesh-MR1750-board.patch rename to patches/openwrt/0052-ar71xx-create-profile-and-build-image-for-the-OpenMesh-MR1750-board.patch diff --git a/patches/openwrt/0054-ar71xx-Extend-the-list-of-bits-in-QCA955X_GMAC_REG_ETH_CFG.patch b/patches/openwrt/0053-ar71xx-Extend-the-list-of-bits-in-QCA955X_GMAC_REG_ETH_CFG.patch similarity index 100% rename from patches/openwrt/0054-ar71xx-Extend-the-list-of-bits-in-QCA955X_GMAC_REG_ETH_CFG.patch rename to patches/openwrt/0053-ar71xx-Extend-the-list-of-bits-in-QCA955X_GMAC_REG_ETH_CFG.patch diff --git a/patches/openwrt/0055-ar71xx-Use-_eth_cfg-helper-for-Open-Mesh-MR900-boards.patch b/patches/openwrt/0054-ar71xx-Use-_eth_cfg-helper-for-Open-Mesh-MR900-boards.patch similarity index 100% rename from patches/openwrt/0055-ar71xx-Use-_eth_cfg-helper-for-Open-Mesh-MR900-boards.patch rename to patches/openwrt/0054-ar71xx-Use-_eth_cfg-helper-for-Open-Mesh-MR900-boards.patch diff --git a/patches/openwrt/0056-ar71xx-Allow-to-use-ath79_gpio_output_select-on-QCA955x.patch b/patches/openwrt/0055-ar71xx-Allow-to-use-ath79_gpio_output_select-on-QCA955x.patch similarity index 100% rename from patches/openwrt/0056-ar71xx-Allow-to-use-ath79_gpio_output_select-on-QCA955x.patch rename to patches/openwrt/0055-ar71xx-Allow-to-use-ath79_gpio_output_select-on-QCA955x.patch diff --git a/patches/openwrt/0057-ar71xx-Add-support-for-ath79_gpio_function_-on-QCA955X.patch b/patches/openwrt/0056-ar71xx-Add-support-for-ath79_gpio_function_-on-QCA955X.patch similarity index 100% rename from patches/openwrt/0057-ar71xx-Add-support-for-ath79_gpio_function_-on-QCA955X.patch rename to patches/openwrt/0056-ar71xx-Add-support-for-ath79_gpio_function_-on-QCA955X.patch diff --git a/patches/openwrt/0058-ar71xx-Add-QCA955X-GPIO-mux-and-function-definitions.patch b/patches/openwrt/0057-ar71xx-Add-QCA955X-GPIO-mux-and-function-definitions.patch similarity index 100% rename from patches/openwrt/0058-ar71xx-Add-QCA955X-GPIO-mux-and-function-definitions.patch rename to patches/openwrt/0057-ar71xx-Add-QCA955X-GPIO-mux-and-function-definitions.patch diff --git a/patches/openwrt/0059-ar71xx-Use-PHY-fixups-for-Open-Mesh-MR900.patch b/patches/openwrt/0058-ar71xx-Use-PHY-fixups-for-Open-Mesh-MR900.patch similarity index 100% rename from patches/openwrt/0059-ar71xx-Use-PHY-fixups-for-Open-Mesh-MR900.patch rename to patches/openwrt/0058-ar71xx-Use-PHY-fixups-for-Open-Mesh-MR900.patch diff --git a/patches/openwrt/0060-ar71xx-Use-PHY-fixups-for-Open-Mesh-MR1750.patch b/patches/openwrt/0059-ar71xx-Use-PHY-fixups-for-Open-Mesh-MR1750.patch similarity index 100% rename from patches/openwrt/0060-ar71xx-Use-PHY-fixups-for-Open-Mesh-MR1750.patch rename to patches/openwrt/0059-ar71xx-Use-PHY-fixups-for-Open-Mesh-MR1750.patch diff --git a/patches/openwrt/0061-ar71xx-Use-private-version-of-ath79_setup_qca955x_eth_cfg-for-MR900.patch b/patches/openwrt/0060-ar71xx-Use-private-version-of-ath79_setup_qca955x_eth_cfg-for-MR900.patch similarity index 100% rename from patches/openwrt/0061-ar71xx-Use-private-version-of-ath79_setup_qca955x_eth_cfg-for-MR900.patch rename to patches/openwrt/0060-ar71xx-Use-private-version-of-ath79_setup_qca955x_eth_cfg-for-MR900.patch diff --git a/patches/openwrt/0062-ar71xx-Use-private-version-of-ath79_setup_qca955x_eth_cfg-for-MR1750.patch b/patches/openwrt/0061-ar71xx-Use-private-version-of-ath79_setup_qca955x_eth_cfg-for-MR1750.patch similarity index 100% rename from patches/openwrt/0062-ar71xx-Use-private-version-of-ath79_setup_qca955x_eth_cfg-for-MR1750.patch rename to patches/openwrt/0061-ar71xx-Use-private-version-of-ath79_setup_qca955x_eth_cfg-for-MR1750.patch diff --git a/patches/openwrt/0063-scripts-om-fwupgradecfg-gen.sh-Fix-u-boot-image-md5sum-check.patch b/patches/openwrt/0062-scripts-om-fwupgradecfg-gen.sh-Fix-u-boot-image-md5sum-check.patch similarity index 100% rename from patches/openwrt/0063-scripts-om-fwupgradecfg-gen.sh-Fix-u-boot-image-md5sum-check.patch rename to patches/openwrt/0062-scripts-om-fwupgradecfg-gen.sh-Fix-u-boot-image-md5sum-check.patch diff --git a/patches/openwrt/0064-scripts-om-fwupgradecfg-gen.sh-Generate-sha256sum-for-uboot-verification.patch b/patches/openwrt/0063-scripts-om-fwupgradecfg-gen.sh-Generate-sha256sum-for-uboot-verification.patch similarity index 100% rename from patches/openwrt/0064-scripts-om-fwupgradecfg-gen.sh-Generate-sha256sum-for-uboot-verification.patch rename to patches/openwrt/0063-scripts-om-fwupgradecfg-gen.sh-Generate-sha256sum-for-uboot-verification.patch diff --git a/patches/openwrt/0065-ar71xx-add-kernel-support-for-the-OpenMesh-OM5P-AC-board.patch b/patches/openwrt/0064-ar71xx-add-kernel-support-for-the-OpenMesh-OM5P-AC-board.patch similarity index 100% rename from patches/openwrt/0065-ar71xx-add-kernel-support-for-the-OpenMesh-OM5P-AC-board.patch rename to patches/openwrt/0064-ar71xx-add-kernel-support-for-the-OpenMesh-OM5P-AC-board.patch diff --git a/patches/openwrt/0066-ar71xx-add-user-space-support-for-the-OpenMesh-OM5P-AC.patch b/patches/openwrt/0065-ar71xx-add-user-space-support-for-the-OpenMesh-OM5P-AC.patch similarity index 100% rename from patches/openwrt/0066-ar71xx-add-user-space-support-for-the-OpenMesh-OM5P-AC.patch rename to patches/openwrt/0065-ar71xx-add-user-space-support-for-the-OpenMesh-OM5P-AC.patch diff --git a/patches/openwrt/0067-scripts-om-fwupgradecfg-gen.sh-add-support-for-the-OM5P-AC.patch b/patches/openwrt/0066-scripts-om-fwupgradecfg-gen.sh-add-support-for-the-OM5P-AC.patch similarity index 100% rename from patches/openwrt/0067-scripts-om-fwupgradecfg-gen.sh-add-support-for-the-OM5P-AC.patch rename to patches/openwrt/0066-scripts-om-fwupgradecfg-gen.sh-add-support-for-the-OM5P-AC.patch diff --git a/patches/openwrt/0068-ar71xx-enable-sysupgrade-for-the-OpenMesh-OM5P-AC.patch b/patches/openwrt/0067-ar71xx-enable-sysupgrade-for-the-OpenMesh-OM5P-AC.patch similarity index 100% rename from patches/openwrt/0068-ar71xx-enable-sysupgrade-for-the-OpenMesh-OM5P-AC.patch rename to patches/openwrt/0067-ar71xx-enable-sysupgrade-for-the-OpenMesh-OM5P-AC.patch diff --git a/patches/openwrt/0069-om-watchdog-add-OpenMesh-OM5P-AC-support.patch b/patches/openwrt/0068-om-watchdog-add-OpenMesh-OM5P-AC-support.patch similarity index 100% rename from patches/openwrt/0069-om-watchdog-add-OpenMesh-OM5P-AC-support.patch rename to patches/openwrt/0068-om-watchdog-add-OpenMesh-OM5P-AC-support.patch diff --git a/patches/openwrt/0070-uboot-envtools-add-OpenMesh-OM5P-AC-support.patch b/patches/openwrt/0069-uboot-envtools-add-OpenMesh-OM5P-AC-support.patch similarity index 100% rename from patches/openwrt/0070-uboot-envtools-add-OpenMesh-OM5P-AC-support.patch rename to patches/openwrt/0069-uboot-envtools-add-OpenMesh-OM5P-AC-support.patch diff --git a/patches/openwrt/0071-ar71xx-extract-ath10k-wifi-board.bin-for-the-OpenMesh-OM5P-AC-board.patch b/patches/openwrt/0070-ar71xx-extract-ath10k-wifi-board.bin-for-the-OpenMesh-OM5P-AC-board.patch similarity index 100% rename from patches/openwrt/0071-ar71xx-extract-ath10k-wifi-board.bin-for-the-OpenMesh-OM5P-AC-board.patch rename to patches/openwrt/0070-ar71xx-extract-ath10k-wifi-board.bin-for-the-OpenMesh-OM5P-AC-board.patch diff --git a/patches/openwrt/0072-ar71xx-create-profile-and-build-image-for-the-OpenMesh-OM5P-AC-board.patch b/patches/openwrt/0071-ar71xx-create-profile-and-build-image-for-the-OpenMesh-OM5P-AC-board.patch similarity index 100% rename from patches/openwrt/0072-ar71xx-create-profile-and-build-image-for-the-OpenMesh-OM5P-AC-board.patch rename to patches/openwrt/0071-ar71xx-create-profile-and-build-image-for-the-OpenMesh-OM5P-AC-board.patch diff --git a/patches/openwrt/0073-ar71xx-add-kernel-support-for-the-OpenMesh-OM5P-ACv2-board.patch b/patches/openwrt/0072-ar71xx-add-kernel-support-for-the-OpenMesh-OM5P-ACv2-board.patch similarity index 100% rename from patches/openwrt/0073-ar71xx-add-kernel-support-for-the-OpenMesh-OM5P-ACv2-board.patch rename to patches/openwrt/0072-ar71xx-add-kernel-support-for-the-OpenMesh-OM5P-ACv2-board.patch diff --git a/patches/openwrt/0074-ar71xx-add-user-space-support-for-the-OpenMesh-OM5P-ACv2.patch b/patches/openwrt/0073-ar71xx-add-user-space-support-for-the-OpenMesh-OM5P-ACv2.patch similarity index 100% rename from patches/openwrt/0074-ar71xx-add-user-space-support-for-the-OpenMesh-OM5P-ACv2.patch rename to patches/openwrt/0073-ar71xx-add-user-space-support-for-the-OpenMesh-OM5P-ACv2.patch diff --git a/patches/openwrt/0075-ar71xx-enable-sysupgrade-for-the-OpenMesh-OM5P-ACv2.patch b/patches/openwrt/0074-ar71xx-enable-sysupgrade-for-the-OpenMesh-OM5P-ACv2.patch similarity index 100% rename from patches/openwrt/0075-ar71xx-enable-sysupgrade-for-the-OpenMesh-OM5P-ACv2.patch rename to patches/openwrt/0074-ar71xx-enable-sysupgrade-for-the-OpenMesh-OM5P-ACv2.patch diff --git a/patches/openwrt/0076-om-watchdog-add-OpenMesh-OM5P-ACv2-support.patch b/patches/openwrt/0075-om-watchdog-add-OpenMesh-OM5P-ACv2-support.patch similarity index 100% rename from patches/openwrt/0076-om-watchdog-add-OpenMesh-OM5P-ACv2-support.patch rename to patches/openwrt/0075-om-watchdog-add-OpenMesh-OM5P-ACv2-support.patch diff --git a/patches/openwrt/0077-uboot-envtools-add-OpenMesh-OM5P-ACv2-support.patch b/patches/openwrt/0076-uboot-envtools-add-OpenMesh-OM5P-ACv2-support.patch similarity index 100% rename from patches/openwrt/0077-uboot-envtools-add-OpenMesh-OM5P-ACv2-support.patch rename to patches/openwrt/0076-uboot-envtools-add-OpenMesh-OM5P-ACv2-support.patch diff --git a/patches/openwrt/0078-ar71xx-extract-ath10k-wifi-board.bin-for-the-OpenMesh-OM5P-ACv2-board.patch b/patches/openwrt/0077-ar71xx-extract-ath10k-wifi-board.bin-for-the-OpenMesh-OM5P-ACv2-board.patch similarity index 100% rename from patches/openwrt/0078-ar71xx-extract-ath10k-wifi-board.bin-for-the-OpenMesh-OM5P-ACv2-board.patch rename to patches/openwrt/0077-ar71xx-extract-ath10k-wifi-board.bin-for-the-OpenMesh-OM5P-ACv2-board.patch diff --git a/patches/openwrt/0079-ar71xx-add-OM5P-ACv2-to-the-OM5P-AC-profile.patch b/patches/openwrt/0078-ar71xx-add-OM5P-ACv2-to-the-OM5P-AC-profile.patch similarity index 100% rename from patches/openwrt/0079-ar71xx-add-OM5P-ACv2-to-the-OM5P-AC-profile.patch rename to patches/openwrt/0078-ar71xx-add-OM5P-ACv2-to-the-OM5P-AC-profile.patch diff --git a/patches/openwrt/0080-libjson-c-Add-support-for-custom-format-strings-for-doubles.patch b/patches/openwrt/0079-libjson-c-Add-support-for-custom-format-strings-for-doubles.patch similarity index 100% rename from patches/openwrt/0080-libjson-c-Add-support-for-custom-format-strings-for-doubles.patch rename to patches/openwrt/0079-libjson-c-Add-support-for-custom-format-strings-for-doubles.patch diff --git a/patches/openwrt/0080-mac80211-ath9k-enable-platform-WLAN-LED-name.patch b/patches/openwrt/0080-mac80211-ath9k-enable-platform-WLAN-LED-name.patch new file mode 100644 index 00000000..e3604a4a --- /dev/null +++ b/patches/openwrt/0080-mac80211-ath9k-enable-platform-WLAN-LED-name.patch @@ -0,0 +1,121 @@ +From: Matthias Schiffer +Date: Sun, 29 May 2016 12:56:43 +0200 +Subject: mac80211: ath9k: enable platform WLAN LED name + +Enable platform-supplied WLAN LED name for ath9k device. + +Signed-off-by: Michal Cieslakiewicz +Acked-by: Hartmut Knaack + +Backport of r48879 + +diff --git a/package/kernel/mac80211/patches/546-ath9k_platform_led_name.patch b/package/kernel/mac80211/patches/546-ath9k_platform_led_name.patch +new file mode 100644 +index 0000000..8d2d899 +--- /dev/null ++++ b/package/kernel/mac80211/patches/546-ath9k_platform_led_name.patch +@@ -0,0 +1,48 @@ ++From: Michal Cieslakiewicz ++Date: Sun, 31 Jan 2016 20:45:57 +0100 ++Subject: [PATCH v4 1/8] mac80211: ath9k: enable platform WLAN LED name ++ ++Enable platform-supplied WLAN LED name for ath9k device. It replaces generic ++'ath9k-phy*' label with string set during platform initialization. ++ ++Signed-off-by: Michal Cieslakiewicz ++--- ++ drivers/net/wireless/ath/ath9k/gpio.c | 10 +++++++--- ++ include/linux/ath9k_platform.h | 1 + ++ 2 files changed, 8 insertions(+), 3 deletions(-) ++ ++--- a/drivers/net/wireless/ath/ath9k/gpio.c +++++ b/drivers/net/wireless/ath/ath9k/gpio.c ++@@ -132,15 +132,19 @@ void ath_init_leds(struct ath_softc *sc) ++ if (AR_SREV_9100(sc->sc_ah)) ++ return; ++ ++- snprintf(led_name, sizeof(led_name), "ath9k-%s", ++- wiphy_name(sc->hw->wiphy)); +++ if (pdata && pdata->led_name) +++ strncpy(led_name, pdata->led_name, sizeof(led_name)); +++ else +++ snprintf(led_name, sizeof(led_name), "ath9k-%s", +++ wiphy_name(sc->hw->wiphy)); ++ ++ if (ath9k_led_blink) ++ trigger = sc->led_default_trigger; ++ else ++ trigger = ieee80211_get_radio_led_name(sc->hw); ++ ++- ath_create_gpio_led(sc, sc->sc_ah->led_pin, led_name, trigger, !sc->sc_ah->config.led_active_high); +++ ath_create_gpio_led(sc, sc->sc_ah->led_pin, led_name, trigger, +++ !sc->sc_ah->config.led_active_high); ++ ++ if (!pdata) ++ return; ++--- a/include/linux/ath9k_platform.h +++++ b/include/linux/ath9k_platform.h ++@@ -45,6 +45,7 @@ struct ath9k_platform_data { ++ ++ int num_leds; ++ const struct gpio_led *leds; +++ const char *led_name; ++ }; ++ ++ #endif /* _LINUX_ATH9K_PLATFORM_H */ +diff --git a/target/linux/ar71xx/files/arch/mips/ath79/dev-ap9x-pci.c b/target/linux/ar71xx/files/arch/mips/ath79/dev-ap9x-pci.c +index d382453..bf80d4d 100644 +--- a/target/linux/ar71xx/files/arch/mips/ath79/dev-ap9x-pci.c ++++ b/target/linux/ar71xx/files/arch/mips/ath79/dev-ap9x-pci.c +@@ -39,6 +39,18 @@ __init void ap9x_pci_setup_wmac_led_pin(unsigned wmac, int pin) + } + } + ++__init void ap9x_pci_setup_wmac_led_name(unsigned wmac, const char *led_name) ++{ ++ switch (wmac) { ++ case 0: ++ ap9x_wmac0_data.led_name = led_name; ++ break; ++ case 1: ++ ap9x_wmac1_data.led_name = led_name; ++ break; ++ } ++} ++ + __init struct ath9k_platform_data *ap9x_pci_get_wmac_data(unsigned wmac) + { + switch (wmac) { +diff --git a/target/linux/ar71xx/files/arch/mips/ath79/dev-ap9x-pci.h b/target/linux/ar71xx/files/arch/mips/ath79/dev-ap9x-pci.h +index ad288cb..dcfe541 100644 +--- a/target/linux/ar71xx/files/arch/mips/ath79/dev-ap9x-pci.h ++++ b/target/linux/ar71xx/files/arch/mips/ath79/dev-ap9x-pci.h +@@ -19,6 +19,7 @@ void ap9x_pci_setup_wmac_led_pin(unsigned wmac, int pin); + void ap9x_pci_setup_wmac_gpio(unsigned wmac, u32 mask, u32 val); + void ap9x_pci_setup_wmac_leds(unsigned wmac, struct gpio_led *leds, + int num_leds); ++void ap9x_pci_setup_wmac_led_name(unsigned wmac, const char *led_name); + struct ath9k_platform_data *ap9x_pci_get_wmac_data(unsigned wmac); + + void ap91_pci_init(u8 *cal_data, u8 *mac_addr); +@@ -33,6 +34,8 @@ static inline void ap9x_pci_setup_wmac_gpio(unsigned wmac, + static inline void ap9x_pci_setup_wmac_leds(unsigned wmac, + struct gpio_led *leds, + int num_leds) {} ++static inline void ap9x_pci_setup_wmac_led_name(unsigned wmac, ++ const char *led_name) {} + static inline struct ath9k_platform_data *ap9x_pci_get_wmac_data(unsigned wmac) + { + return NULL; +diff --git a/target/linux/generic/files/include/linux/ath9k_platform.h b/target/linux/generic/files/include/linux/ath9k_platform.h +index 30ce216..823e5ac 100644 +--- a/target/linux/generic/files/include/linux/ath9k_platform.h ++++ b/target/linux/generic/files/include/linux/ath9k_platform.h +@@ -45,6 +45,7 @@ struct ath9k_platform_data { + + int num_leds; + const struct gpio_led *leds; ++ const char *led_name; + }; + + #endif /* _LINUX_ATH9K_PLATFORM_H */ diff --git a/patches/openwrt/0081-mac80211-ath9k-set-default-state-for-platform-LEDs.patch b/patches/openwrt/0081-mac80211-ath9k-set-default-state-for-platform-LEDs.patch new file mode 100644 index 00000000..0c49ef87 --- /dev/null +++ b/patches/openwrt/0081-mac80211-ath9k-set-default-state-for-platform-LEDs.patch @@ -0,0 +1,47 @@ +From: Matthias Schiffer +Date: Sun, 29 May 2016 13:37:28 +0200 +Subject: mac80211: ath9k: set default state for platform LEDs + +Support default state for platform LEDs connected to ath9k device. +Now LEDs are correctly set on or off at ath9k module initialization. + +Signed-off-by: Michal Cieslakiewicz +Acked-by: Hartmut Knaack + +Backport of r48880 + +diff --git a/package/kernel/mac80211/patches/547-ath9k_led_defstate_fix.patch b/package/kernel/mac80211/patches/547-ath9k_led_defstate_fix.patch +new file mode 100644 +index 0000000..db0b619 +--- /dev/null ++++ b/package/kernel/mac80211/patches/547-ath9k_led_defstate_fix.patch +@@ -0,0 +1,29 @@ ++From: Michal Cieslakiewicz ++Date: Sun, 31 Jan 2016 20:48:49 +0100 ++Subject: [PATCH v4 2/8] mac80211: ath9k: set default state for platform LEDs ++ ++Support default state for platform LEDs connected to ath9k device. ++Now LEDs are correctly set on or off at ath9k module initialization. ++Very useful if power LED is connected to wireless chip. ++ ++Signed-off-by: Michal Cieslakiewicz ++--- ++ gpio.c | 7 +++++-- ++ 1 file changed, 5 insertions(+), 2 deletions(-) ++ ++--- a/drivers/net/wireless/ath/ath9k/gpio.c +++++ b/drivers/net/wireless/ath/ath9k/gpio.c ++@@ -54,8 +54,11 @@ static int ath_add_led(struct ath_softc ++ ath9k_hw_cfg_output(sc->sc_ah, gpio->gpio, ++ AR_GPIO_OUTPUT_MUX_AS_OUTPUT); ++ ++- /* LED off */ ++- ath9k_hw_set_gpio(sc->sc_ah, gpio->gpio, gpio->active_low); +++ /* Set default LED state */ +++ if (gpio->default_state == LEDS_GPIO_DEFSTATE_ON) +++ ath9k_hw_set_gpio(sc->sc_ah, gpio->gpio, !gpio->active_low); +++ else +++ ath9k_hw_set_gpio(sc->sc_ah, gpio->gpio, gpio->active_low); ++ ++ return 0; ++ } diff --git a/patches/openwrt/0082-mac80211-ath9k-enable-access-to-GPIO.patch b/patches/openwrt/0082-mac80211-ath9k-enable-access-to-GPIO.patch new file mode 100644 index 00000000..dddcadd6 --- /dev/null +++ b/patches/openwrt/0082-mac80211-ath9k-enable-access-to-GPIO.patch @@ -0,0 +1,261 @@ +From: Matthias Schiffer +Date: Sun, 29 May 2016 13:37:59 +0200 +Subject: mac80211: ath9k: enable access to GPIO + +Enable access to GPIO chip and its pins for Atheros AR92xx +wireless devices. For now AR9285 and AR9287 are supported. + +Signed-off-by: Michal Cieslakiewicz +Acked-by: Hartmut Knaack + +Backport of r48881 + +diff --git a/package/kernel/mac80211/patches/549-ath9k_enable_gpio_chip.patch b/package/kernel/mac80211/patches/549-ath9k_enable_gpio_chip.patch +new file mode 100644 +index 0000000..beee169 +--- /dev/null ++++ b/package/kernel/mac80211/patches/549-ath9k_enable_gpio_chip.patch +@@ -0,0 +1,243 @@ ++From: Michal Cieslakiewicz ++Date: Sun, 31 Jan 2016 21:01:31 +0100 ++Subject: [PATCH v4 4/8] mac80211: ath9k: enable access to GPIO ++ ++Enable access to GPIO chip and its pins for Atheros AR92xx ++wireless devices. For now AR9285 and AR9287 are supported. ++ ++Signed-off-by: Michal Cieslakiewicz ++--- ++ ath9k.h | 23 ++++++++++++ ++ gpio.c | 121 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ init.c | 2 + ++ 3 files changed, 146 insertions(+) ++ ++--- a/drivers/net/wireless/ath/ath9k/ath9k.h +++++ b/drivers/net/wireless/ath/ath9k/ath9k.h ++@@ -24,6 +24,7 @@ ++ #include ++ #include ++ #include +++#include ++ ++ #include "common.h" ++ #include "debug.h" ++@@ -817,6 +818,13 @@ void ath_fill_led_pin(struct ath_softc * ++ int ath_create_gpio_led(struct ath_softc *sc, int gpio, const char *name, ++ const char *trigger, bool active_low); ++ +++/***************/ +++/* GPIO Chip */ +++/***************/ +++ +++void ath9k_register_gpio_chip(struct ath_softc *sc); +++void ath9k_unregister_gpio_chip(struct ath_softc *sc); +++ ++ #else ++ static inline void ath_init_leds(struct ath_softc *sc) ++ { ++@@ -828,6 +836,14 @@ static inline void ath_deinit_leds(struc ++ static inline void ath_fill_led_pin(struct ath_softc *sc) ++ { ++ } +++ +++static inline void ath9k_register_gpio_chip(struct ath_softc *sc) +++{ +++} +++ +++static inline void ath9k_unregister_gpio_chip(struct ath_softc *sc) +++{ +++} ++ #endif ++ ++ /************************/ ++@@ -963,6 +979,12 @@ struct ath_led { ++ struct led_classdev cdev; ++ }; ++ +++struct ath9k_gpio_chip { +++ struct ath_softc *sc; +++ char label[32]; +++ struct gpio_chip gchip; +++}; +++ ++ struct ath_softc { ++ struct ieee80211_hw *hw; ++ struct device *dev; ++@@ -1017,6 +1039,7 @@ struct ath_softc { ++ #ifdef CPTCFG_MAC80211_LEDS ++ const char *led_default_trigger; ++ struct list_head leds; +++ struct ath9k_gpio_chip *gpiochip; ++ #endif ++ ++ #ifdef CPTCFG_ATH9K_DEBUGFS ++--- a/drivers/net/wireless/ath/ath9k/gpio.c +++++ b/drivers/net/wireless/ath/ath9k/gpio.c ++@@ -22,6 +22,9 @@ ++ /********************************/ ++ ++ #ifdef CPTCFG_MAC80211_LEDS +++ +++#include +++ ++ static void ath_led_brightness(struct led_classdev *led_cdev, ++ enum led_brightness brightness) ++ { ++@@ -60,6 +63,10 @@ static int ath_add_led(struct ath_softc ++ else ++ ath9k_hw_set_gpio(sc->sc_ah, gpio->gpio, gpio->active_low); ++ +++ /* If there is GPIO chip configured, reserve LED pin */ +++ if (sc->gpiochip) +++ gpio_request(sc->gpiochip->gchip.base + gpio->gpio, gpio->name); +++ ++ return 0; ++ } ++ ++@@ -116,6 +123,9 @@ void ath_deinit_leds(struct ath_softc *s ++ ++ while (!list_empty(&sc->leds)) { ++ led = list_first_entry(&sc->leds, struct ath_led, list); +++ /* If there is GPIO chip configured, free LED pin */ +++ if (sc->gpiochip) +++ gpio_free(sc->gpiochip->gchip.base + led->gpio->gpio); ++ list_del(&led->list); ++ ath_led_brightness(&led->cdev, LED_OFF); ++ led_classdev_unregister(&led->cdev); ++@@ -186,6 +196,117 @@ void ath_fill_led_pin(struct ath_softc * ++ /* LED off, active low */ ++ ath9k_hw_set_gpio(ah, ah->led_pin, (ah->config.led_active_high) ? 0 : 1); ++ } +++ +++/***************/ +++/* GPIO Chip */ +++/***************/ +++ +++/* gpio_chip handler : set GPIO to input */ +++static int ath9k_gpio_pin_cfg_input(struct gpio_chip *chip, unsigned offset) +++{ +++ struct ath9k_gpio_chip *gc = container_of(chip, struct ath9k_gpio_chip, +++ gchip); +++ +++ ath9k_hw_cfg_gpio_input(gc->sc->sc_ah, offset); +++ +++ return 0; +++} +++ +++/* gpio_chip handler : set GPIO to output */ +++static int ath9k_gpio_pin_cfg_output(struct gpio_chip *chip, unsigned offset, +++ int value) +++{ +++ struct ath9k_gpio_chip *gc = container_of(chip, struct ath9k_gpio_chip, +++ gchip); +++ +++ ath9k_hw_cfg_output(gc->sc->sc_ah, offset, +++ AR_GPIO_OUTPUT_MUX_AS_OUTPUT); +++ ath9k_hw_set_gpio(gc->sc->sc_ah, offset, value); +++ +++ return 0; +++} +++ +++/* gpio_chip handler : query GPIO direction (0=out, 1=in) */ +++static int ath9k_gpio_pin_get_dir(struct gpio_chip *chip, unsigned offset) +++{ +++ struct ath9k_gpio_chip *gc = container_of(chip, struct ath9k_gpio_chip, +++ gchip); +++ struct ath_hw *ah = gc->sc->sc_ah; +++ +++ return !((REG_READ(ah, AR_GPIO_OE_OUT) >> (offset * 2)) & 3); +++} +++ +++/* gpio_chip handler : get GPIO pin value */ +++static int ath9k_gpio_pin_get(struct gpio_chip *chip, unsigned offset) +++{ +++ struct ath9k_gpio_chip *gc = container_of(chip, struct ath9k_gpio_chip, +++ gchip); +++ +++ return ath9k_hw_gpio_get(gc->sc->sc_ah, offset); +++} +++ +++/* gpio_chip handler : set GPIO pin to value */ +++static void ath9k_gpio_pin_set(struct gpio_chip *chip, unsigned offset, +++ int value) +++{ +++ struct ath9k_gpio_chip *gc = container_of(chip, struct ath9k_gpio_chip, +++ gchip); +++ +++ ath9k_hw_set_gpio(gc->sc->sc_ah, offset, value); +++} +++ +++/* register GPIO chip */ +++void ath9k_register_gpio_chip(struct ath_softc *sc) +++{ +++ struct ath9k_gpio_chip *gc; +++ u16 ng; +++ +++ /* for now only AR9285 and AR9287 are recognized */ +++ if (AR_SREV_9287(sc->sc_ah)) +++ ng = AR9287_NUM_GPIO; +++ else if (AR_SREV_9285(sc->sc_ah)) +++ ng = AR9285_NUM_GPIO; +++ else +++ return; +++ +++ gc = kzalloc(sizeof(struct ath9k_gpio_chip), GFP_KERNEL); +++ if (!gc) +++ return; +++ +++ snprintf(gc->label, sizeof(gc->label), "ath9k-%s", +++ wiphy_name(sc->hw->wiphy)); +++ gc->gchip.label = gc->label; +++ gc->gchip.base = -1; /* determine base automatically */ +++ gc->gchip.ngpio = ng; +++ gc->gchip.direction_input = ath9k_gpio_pin_cfg_input; +++ gc->gchip.direction_output = ath9k_gpio_pin_cfg_output; +++ gc->gchip.get_direction = ath9k_gpio_pin_get_dir; +++ gc->gchip.get = ath9k_gpio_pin_get; +++ gc->gchip.set = ath9k_gpio_pin_set; +++ gc->gchip.owner = THIS_MODULE; +++ +++ if (gpiochip_add(&gc->gchip)) { +++ kfree(gc); +++ return; +++ } +++ +++ sc->gpiochip = gc; +++ gc->sc = sc; +++} +++ +++/* remove GPIO chip */ +++void ath9k_unregister_gpio_chip(struct ath_softc *sc) +++{ +++ struct ath9k_gpio_chip *gc = sc->gpiochip; +++ +++ if (!gc) +++ return; +++ +++ gpiochip_remove(&gc->gchip); +++ kfree(gc); +++ sc->gpiochip = NULL; +++} +++ ++ #endif ++ ++ /*******************/ ++--- a/drivers/net/wireless/ath/ath9k/init.c +++++ b/drivers/net/wireless/ath/ath9k/init.c ++@@ -979,6 +979,7 @@ int ath9k_init_device(u16 devid, struct ++ goto debug_cleanup; ++ } ++ +++ ath9k_register_gpio_chip(sc); ++ ath_init_leds(sc); ++ ath_start_rfkill_poll(sc); ++ ++@@ -1026,6 +1027,7 @@ void ath9k_deinit_device(struct ath_soft ++ ++ wiphy_rfkill_stop_polling(sc->hw->wiphy); ++ ath_deinit_leds(sc); +++ ath9k_unregister_gpio_chip(sc); ++ ++ ath9k_ps_restore(sc); ++ diff --git a/patches/openwrt/0083-mac80211-refresh-patch.patch b/patches/openwrt/0083-mac80211-refresh-patch.patch new file mode 100644 index 00000000..79e409c9 --- /dev/null +++ b/patches/openwrt/0083-mac80211-refresh-patch.patch @@ -0,0 +1,30 @@ +From: Matthias Schiffer +Date: Sun, 29 May 2016 13:38:19 +0200 +Subject: mac80211: refresh patch + +Signed-off-by: Felix Fietkau + +Backport of r48882 + +diff --git a/package/kernel/mac80211/patches/549-ath9k_enable_gpio_chip.patch b/package/kernel/mac80211/patches/549-ath9k_enable_gpio_chip.patch +index beee169..55bb991 100644 +--- a/package/kernel/mac80211/patches/549-ath9k_enable_gpio_chip.patch ++++ b/package/kernel/mac80211/patches/549-ath9k_enable_gpio_chip.patch +@@ -225,7 +225,7 @@ Signed-off-by: Michal Cieslakiewicz + /*******************/ + --- a/drivers/net/wireless/ath/ath9k/init.c + +++ b/drivers/net/wireless/ath/ath9k/init.c +-@@ -979,6 +979,7 @@ int ath9k_init_device(u16 devid, struct ++@@ -975,6 +975,7 @@ int ath9k_init_device(u16 devid, struct + goto debug_cleanup; + } + +@@ -233,7 +233,7 @@ Signed-off-by: Michal Cieslakiewicz + ath_init_leds(sc); + ath_start_rfkill_poll(sc); + +-@@ -1026,6 +1027,7 @@ void ath9k_deinit_device(struct ath_soft ++@@ -1022,6 +1023,7 @@ void ath9k_deinit_device(struct ath_soft + + wiphy_rfkill_stop_polling(sc->hw->wiphy); + ath_deinit_leds(sc); diff --git a/patches/openwrt/0084-mac80211-ath9k-enable-GPIO-buttons.patch b/patches/openwrt/0084-mac80211-ath9k-enable-GPIO-buttons.patch new file mode 100644 index 00000000..f2eb5bc6 --- /dev/null +++ b/patches/openwrt/0084-mac80211-ath9k-enable-GPIO-buttons.patch @@ -0,0 +1,259 @@ +From: Matthias Schiffer +Date: Sun, 29 May 2016 13:38:45 +0200 +Subject: mac80211: ath9k: enable GPIO buttons + +Enable platform-defined GPIO button support for ath9k device. +Key poller is activated for attached platform buttons. +Requires ath9k GPIO chip access. + +Signed-off-by: Michal Cieslakiewicz + +Backport of r48921 + +diff --git a/package/kernel/mac80211/patches/550-ath9k_enable_gpio_buttons.patch b/package/kernel/mac80211/patches/550-ath9k_enable_gpio_buttons.patch +new file mode 100644 +index 0000000..e3a8cec +--- /dev/null ++++ b/package/kernel/mac80211/patches/550-ath9k_enable_gpio_buttons.patch +@@ -0,0 +1,169 @@ ++From: Michal Cieslakiewicz ++Subject: [PATCH v5 5/8] mac80211: ath9k: enable GPIO buttons ++ ++Enable platform-defined GPIO button support for ath9k device. ++Key poller is activated for attached platform buttons. ++Requires ath9k GPIO chip access. ++ ++Signed-off-by: Michal Cieslakiewicz ++--- ++ drivers/net/wireless/ath/ath9k/ath9k.h | 16 ++++++ ++ drivers/net/wireless/ath/ath9k/gpio.c | 77 +++++++++++++++++++++++++++++++++ ++ drivers/net/wireless/ath/ath9k/init.c | 2 ++ include/linux/ath9k_platform.h | 4 + ++ 4 files changed, 99 insertions(+) ++ ++--- a/drivers/net/wireless/ath/ath9k/ath9k.h +++++ b/drivers/net/wireless/ath/ath9k/ath9k.h ++@@ -825,6 +825,13 @@ int ath_create_gpio_led(struct ath_softc ++ void ath9k_register_gpio_chip(struct ath_softc *sc); ++ void ath9k_unregister_gpio_chip(struct ath_softc *sc); ++ +++/******************/ +++/* GPIO Buttons */ +++/******************/ +++ +++void ath9k_init_buttons(struct ath_softc *sc); +++void ath9k_deinit_buttons(struct ath_softc *sc); +++ ++ #else ++ static inline void ath_init_leds(struct ath_softc *sc) ++ { ++@@ -844,6 +851,14 @@ static inline void ath9k_register_gpio_c ++ static inline void ath9k_unregister_gpio_chip(struct ath_softc *sc) ++ { ++ } +++ +++static inline void ath9k_init_buttons(struct ath_softc *sc) +++{ +++} +++ +++static inline void ath9k_deinit_buttons(struct ath_softc *sc) +++{ +++} ++ #endif ++ ++ /************************/ ++@@ -1040,6 +1055,7 @@ struct ath_softc { ++ const char *led_default_trigger; ++ struct list_head leds; ++ struct ath9k_gpio_chip *gpiochip; +++ struct platform_device *btnpdev; /* gpio-keys-polled */ ++ #endif ++ ++ #ifdef CPTCFG_ATH9K_DEBUGFS ++--- a/drivers/net/wireless/ath/ath9k/gpio.c +++++ b/drivers/net/wireless/ath/ath9k/gpio.c ++@@ -24,6 +24,8 @@ ++ #ifdef CPTCFG_MAC80211_LEDS ++ ++ #include +++#include +++#include ++ ++ static void ath_led_brightness(struct led_classdev *led_cdev, ++ enum led_brightness brightness) ++@@ -159,7 +161,7 @@ void ath_init_leds(struct ath_softc *sc) ++ ath_create_gpio_led(sc, sc->sc_ah->led_pin, led_name, trigger, ++ !sc->sc_ah->config.led_active_high); ++ ++- if (!pdata) +++ if (!pdata || !pdata->leds || !pdata->num_leds) ++ return; ++ ++ for (i = 0; i < pdata->num_leds; i++) ++@@ -307,6 +309,63 @@ void ath9k_unregister_gpio_chip(struct a ++ sc->gpiochip = NULL; ++ } ++ +++/******************/ +++/* GPIO Buttons */ +++/******************/ +++ +++/* add GPIO buttons */ +++void ath9k_init_buttons(struct ath_softc *sc) +++{ +++ struct ath9k_platform_data *pdata = sc->dev->platform_data; +++ struct platform_device *pdev; +++ struct gpio_keys_platform_data gkpdata; +++ struct gpio_keys_button *bt; +++ int i; +++ +++ if (!sc->gpiochip) +++ return; +++ +++ if (!pdata || !pdata->btns || !pdata->num_btns) +++ return; +++ +++ bt = devm_kmemdup(sc->dev, pdata->btns, +++ pdata->num_btns * sizeof(struct gpio_keys_button), +++ GFP_KERNEL); +++ if (!bt) +++ return; +++ +++ for (i = 0; i < pdata->num_btns; i++) { +++ ath9k_hw_cfg_gpio_input(sc->sc_ah, pdata->btns[i].gpio); +++ bt[i].gpio = sc->gpiochip->gchip.base + pdata->btns[i].gpio; +++ } +++ +++ memset(&gkpdata, 0, sizeof(struct gpio_keys_platform_data)); +++ gkpdata.buttons = bt; +++ gkpdata.nbuttons = pdata->num_btns; +++ gkpdata.poll_interval = pdata->btn_poll_interval; +++ +++ pdev = platform_device_register_data(sc->dev, "gpio-keys-polled", +++ PLATFORM_DEVID_AUTO, &gkpdata, +++ sizeof(gkpdata)); +++ if (!IS_ERR_OR_NULL(pdev)) +++ sc->btnpdev = pdev; +++ else { +++ sc->btnpdev = NULL; +++ devm_kfree(sc->dev, bt); +++ } +++} +++ +++/* remove GPIO buttons */ +++void ath9k_deinit_buttons(struct ath_softc *sc) +++{ +++ if (!sc->gpiochip || !sc->btnpdev) +++ return; +++ +++ platform_device_unregister(sc->btnpdev); +++ +++ sc->btnpdev = NULL; +++} +++ ++ #endif ++ ++ /*******************/ ++--- a/drivers/net/wireless/ath/ath9k/init.c +++++ b/drivers/net/wireless/ath/ath9k/init.c ++@@ -977,6 +977,7 @@ int ath9k_init_device(u16 devid, struct ++ ++ ath9k_register_gpio_chip(sc); ++ ath_init_leds(sc); +++ ath9k_init_buttons(sc); ++ ath_start_rfkill_poll(sc); ++ ++ return 0; ++@@ -1022,6 +1023,7 @@ void ath9k_deinit_device(struct ath_soft ++ ath9k_ps_wakeup(sc); ++ ++ wiphy_rfkill_stop_polling(sc->hw->wiphy); +++ ath9k_deinit_buttons(sc); ++ ath_deinit_leds(sc); ++ ath9k_unregister_gpio_chip(sc); ++ ++--- a/include/linux/ath9k_platform.h +++++ b/include/linux/ath9k_platform.h ++@@ -46,6 +46,10 @@ struct ath9k_platform_data { ++ int num_leds; ++ const struct gpio_led *leds; ++ const char *led_name; +++ +++ unsigned num_btns; +++ const struct gpio_keys_button *btns; +++ unsigned btn_poll_interval; ++ }; ++ ++ #endif /* _LINUX_ATH9K_PLATFORM_H */ +diff --git a/target/linux/ar71xx/files/arch/mips/ath79/dev-ap9x-pci.c b/target/linux/ar71xx/files/arch/mips/ath79/dev-ap9x-pci.c +index bf80d4d..20bb06e 100644 +--- a/target/linux/ar71xx/files/arch/mips/ath79/dev-ap9x-pci.c ++++ b/target/linux/ar71xx/files/arch/mips/ath79/dev-ap9x-pci.c +@@ -93,6 +93,20 @@ __init void ap9x_pci_setup_wmac_leds(unsigned wmac, struct gpio_led *leds, + } + } + ++__init void ap9x_pci_setup_wmac_btns(unsigned wmac, ++ struct gpio_keys_button *btns, ++ unsigned num_btns, unsigned poll_interval) ++{ ++ struct ath9k_platform_data *ap9x_wmac_data; ++ ++ if (!(ap9x_wmac_data = ap9x_pci_get_wmac_data(wmac))) ++ return; ++ ++ ap9x_wmac_data->btns = btns; ++ ap9x_wmac_data->num_btns = num_btns; ++ ap9x_wmac_data->btn_poll_interval = poll_interval; ++} ++ + static int ap91_pci_plat_dev_init(struct pci_dev *dev) + { + switch (PCI_SLOT(dev->devfn)) { +diff --git a/target/linux/ar71xx/files/arch/mips/ath79/dev-ap9x-pci.h b/target/linux/ar71xx/files/arch/mips/ath79/dev-ap9x-pci.h +index dcfe541..d7c0185 100644 +--- a/target/linux/ar71xx/files/arch/mips/ath79/dev-ap9x-pci.h ++++ b/target/linux/ar71xx/files/arch/mips/ath79/dev-ap9x-pci.h +@@ -12,6 +12,7 @@ + #define _ATH79_DEV_AP9X_PCI_H + + struct gpio_led; ++struct gpio_keys_button; + struct ath9k_platform_data; + + #if defined(CONFIG_ATH79_DEV_AP9X_PCI) +@@ -20,6 +21,8 @@ void ap9x_pci_setup_wmac_gpio(unsigned wmac, u32 mask, u32 val); + void ap9x_pci_setup_wmac_leds(unsigned wmac, struct gpio_led *leds, + int num_leds); + void ap9x_pci_setup_wmac_led_name(unsigned wmac, const char *led_name); ++void ap9x_pci_setup_wmac_btns(unsigned wmac, struct gpio_keys_button *btns, ++ unsigned num_btns, unsigned poll_interval); + struct ath9k_platform_data *ap9x_pci_get_wmac_data(unsigned wmac); + + void ap91_pci_init(u8 *cal_data, u8 *mac_addr); +@@ -36,6 +39,10 @@ static inline void ap9x_pci_setup_wmac_leds(unsigned wmac, + int num_leds) {} + static inline void ap9x_pci_setup_wmac_led_name(unsigned wmac, + const char *led_name) {} ++static inline void ap9x_pci_setup_wmac_btns(unsigned wmac, ++ struct gpio_keys_button *btns, ++ unsigned num_btns, ++ unsigned poll_interval) {} + static inline struct ath9k_platform_data *ap9x_pci_get_wmac_data(unsigned wmac) + { + return NULL; +diff --git a/target/linux/generic/files/include/linux/ath9k_platform.h b/target/linux/generic/files/include/linux/ath9k_platform.h +index 823e5ac..e543a64 100644 +--- a/target/linux/generic/files/include/linux/ath9k_platform.h ++++ b/target/linux/generic/files/include/linux/ath9k_platform.h +@@ -46,6 +46,10 @@ struct ath9k_platform_data { + int num_leds; + const struct gpio_led *leds; + const char *led_name; ++ ++ unsigned num_btns; ++ const struct gpio_keys_button *btns; ++ unsigned btn_poll_interval; + }; + + #endif /* _LINUX_ATH9K_PLATFORM_H */ diff --git a/patches/openwrt/0085-mac80211-rework-gpio-chip-button-support-to-build-on-platforms-without-CONFIG_GPIOLIB.patch b/patches/openwrt/0085-mac80211-rework-gpio-chip-button-support-to-build-on-platforms-without-CONFIG_GPIOLIB.patch new file mode 100644 index 00000000..24cd5638 --- /dev/null +++ b/patches/openwrt/0085-mac80211-rework-gpio-chip-button-support-to-build-on-platforms-without-CONFIG_GPIOLIB.patch @@ -0,0 +1,827 @@ +From: Matthias Schiffer +Date: Sun, 29 May 2016 13:39:10 +0200 +Subject: mac80211: rework gpio chip/button support to build on platforms without CONFIG_GPIOLIB + +Signed-off-by: Felix Fietkau + +Backport of r48938 + +diff --git a/package/kernel/mac80211/patches/548-ath9k_enable_gpio_chip.patch b/package/kernel/mac80211/patches/548-ath9k_enable_gpio_chip.patch +new file mode 100644 +index 0000000..f91d85c +--- /dev/null ++++ b/package/kernel/mac80211/patches/548-ath9k_enable_gpio_chip.patch +@@ -0,0 +1,235 @@ ++From: Michal Cieslakiewicz ++Date: Sun, 31 Jan 2016 21:01:31 +0100 ++Subject: [PATCH v4 4/8] mac80211: ath9k: enable access to GPIO ++ ++Enable access to GPIO chip and its pins for Atheros AR92xx ++wireless devices. For now AR9285 and AR9287 are supported. ++ ++Signed-off-by: Michal Cieslakiewicz ++Signed-off-by: Felix Fietkau ++--- ++--- a/drivers/net/wireless/ath/ath9k/ath9k.h +++++ b/drivers/net/wireless/ath/ath9k/ath9k.h ++@@ -24,6 +24,7 @@ ++ #include ++ #include ++ #include +++#include ++ ++ #include "common.h" ++ #include "debug.h" ++@@ -963,6 +964,14 @@ struct ath_led { ++ struct led_classdev cdev; ++ }; ++ +++#ifdef CONFIG_GPIOLIB +++struct ath9k_gpio_chip { +++ struct ath_softc *sc; +++ char label[32]; +++ struct gpio_chip gchip; +++}; +++#endif +++ ++ struct ath_softc { ++ struct ieee80211_hw *hw; ++ struct device *dev; ++@@ -1017,6 +1026,9 @@ struct ath_softc { ++ #ifdef CPTCFG_MAC80211_LEDS ++ const char *led_default_trigger; ++ struct list_head leds; +++#ifdef CONFIG_GPIOLIB +++ struct ath9k_gpio_chip *gpiochip; +++#endif ++ #endif ++ ++ #ifdef CPTCFG_ATH9K_DEBUGFS ++--- a/drivers/net/wireless/ath/ath9k/gpio.c +++++ b/drivers/net/wireless/ath/ath9k/gpio.c ++@@ -16,12 +16,138 @@ ++ ++ #include "ath9k.h" ++ #include +++#include +++ +++#ifdef CPTCFG_MAC80211_LEDS +++ +++#ifdef CONFIG_GPIOLIB +++ +++/***************/ +++/* GPIO Chip */ +++/***************/ +++ +++/* gpio_chip handler : set GPIO to input */ +++static int ath9k_gpio_pin_cfg_input(struct gpio_chip *chip, unsigned offset) +++{ +++ struct ath9k_gpio_chip *gc = container_of(chip, struct ath9k_gpio_chip, +++ gchip); +++ +++ ath9k_hw_cfg_gpio_input(gc->sc->sc_ah, offset); +++ +++ return 0; +++} +++ +++/* gpio_chip handler : set GPIO to output */ +++static int ath9k_gpio_pin_cfg_output(struct gpio_chip *chip, unsigned offset, +++ int value) +++{ +++ struct ath9k_gpio_chip *gc = container_of(chip, struct ath9k_gpio_chip, +++ gchip); +++ +++ ath9k_hw_cfg_output(gc->sc->sc_ah, offset, +++ AR_GPIO_OUTPUT_MUX_AS_OUTPUT); +++ ath9k_hw_set_gpio(gc->sc->sc_ah, offset, value); +++ +++ return 0; +++} +++ +++/* gpio_chip handler : query GPIO direction (0=out, 1=in) */ +++static int ath9k_gpio_pin_get_dir(struct gpio_chip *chip, unsigned offset) +++{ +++ struct ath9k_gpio_chip *gc = container_of(chip, struct ath9k_gpio_chip, +++ gchip); +++ struct ath_hw *ah = gc->sc->sc_ah; +++ +++ return !((REG_READ(ah, AR_GPIO_OE_OUT) >> (offset * 2)) & 3); +++} +++ +++/* gpio_chip handler : get GPIO pin value */ +++static int ath9k_gpio_pin_get(struct gpio_chip *chip, unsigned offset) +++{ +++ struct ath9k_gpio_chip *gc = container_of(chip, struct ath9k_gpio_chip, +++ gchip); +++ +++ return ath9k_hw_gpio_get(gc->sc->sc_ah, offset); +++} +++ +++/* gpio_chip handler : set GPIO pin to value */ +++static void ath9k_gpio_pin_set(struct gpio_chip *chip, unsigned offset, +++ int value) +++{ +++ struct ath9k_gpio_chip *gc = container_of(chip, struct ath9k_gpio_chip, +++ gchip); +++ +++ ath9k_hw_set_gpio(gc->sc->sc_ah, offset, value); +++} +++ +++/* register GPIO chip */ +++static void ath9k_register_gpio_chip(struct ath_softc *sc) +++{ +++ struct ath9k_gpio_chip *gc; +++ u16 ng; +++ +++ /* for now only AR9285 and AR9287 are recognized */ +++ if (AR_SREV_9287(sc->sc_ah)) +++ ng = AR9287_NUM_GPIO; +++ else if (AR_SREV_9285(sc->sc_ah)) +++ ng = AR9285_NUM_GPIO; +++ else +++ return; +++ +++ gc = kzalloc(sizeof(struct ath9k_gpio_chip), GFP_KERNEL); +++ if (!gc) +++ return; +++ +++ snprintf(gc->label, sizeof(gc->label), "ath9k-%s", +++ wiphy_name(sc->hw->wiphy)); +++ gc->gchip.label = gc->label; +++ gc->gchip.base = -1; /* determine base automatically */ +++ gc->gchip.ngpio = ng; +++ gc->gchip.direction_input = ath9k_gpio_pin_cfg_input; +++ gc->gchip.direction_output = ath9k_gpio_pin_cfg_output; +++ gc->gchip.get_direction = ath9k_gpio_pin_get_dir; +++ gc->gchip.get = ath9k_gpio_pin_get; +++ gc->gchip.set = ath9k_gpio_pin_set; +++ gc->gchip.owner = THIS_MODULE; +++ +++ if (gpiochip_add(&gc->gchip)) { +++ kfree(gc); +++ return; +++ } +++ +++ sc->gpiochip = gc; +++ gc->sc = sc; +++} +++ +++/* remove GPIO chip */ +++static void ath9k_unregister_gpio_chip(struct ath_softc *sc) +++{ +++ struct ath9k_gpio_chip *gc = sc->gpiochip; +++ +++ if (!gc) +++ return; +++ +++ gpiochip_remove(&gc->gchip); +++ kfree(gc); +++ sc->gpiochip = NULL; +++} +++ +++#else /* CONFIG_GPIOLIB */ +++ +++static inline void ath9k_register_gpio_chip(struct ath_softc *sc) +++{ +++} +++ +++static inline void ath9k_unregister_gpio_chip(struct ath_softc *sc) +++{ +++} +++ +++#endif /* CONFIG_GPIOLIB */ ++ ++ /********************************/ ++ /* LED functions */ ++ /********************************/ ++ ++-#ifdef CPTCFG_MAC80211_LEDS ++ static void ath_led_brightness(struct led_classdev *led_cdev, ++ enum led_brightness brightness) ++ { ++@@ -60,6 +186,12 @@ static int ath_add_led(struct ath_softc ++ else ++ ath9k_hw_set_gpio(sc->sc_ah, gpio->gpio, gpio->active_low); ++ +++#ifdef CONFIG_GPIOLIB +++ /* If there is GPIO chip configured, reserve LED pin */ +++ if (sc->gpiochip) +++ gpio_request(sc->gpiochip->gchip.base + gpio->gpio, gpio->name); +++#endif +++ ++ return 0; ++ } ++ ++@@ -116,11 +248,17 @@ void ath_deinit_leds(struct ath_softc *s ++ ++ while (!list_empty(&sc->leds)) { ++ led = list_first_entry(&sc->leds, struct ath_led, list); +++#ifdef CONFIG_GPIOLIB +++ /* If there is GPIO chip configured, free LED pin */ +++ if (sc->gpiochip) +++ gpio_free(sc->gpiochip->gchip.base + led->gpio->gpio); +++#endif ++ list_del(&led->list); ++ ath_led_brightness(&led->cdev, LED_OFF); ++ led_classdev_unregister(&led->cdev); ++ kfree(led); ++ } +++ ath9k_unregister_gpio_chip(sc); ++ } ++ ++ void ath_init_leds(struct ath_softc *sc) ++@@ -135,6 +273,8 @@ void ath_init_leds(struct ath_softc *sc) ++ if (AR_SREV_9100(sc->sc_ah)) ++ return; ++ +++ ath9k_register_gpio_chip(sc); +++ ++ if (pdata && pdata->led_name) ++ strncpy(led_name, pdata->led_name, sizeof(led_name)); ++ else ++@@ -186,6 +326,7 @@ void ath_fill_led_pin(struct ath_softc * ++ /* LED off, active low */ ++ ath9k_hw_set_gpio(ah, ah->led_pin, (ah->config.led_active_high) ? 0 : 1); ++ } +++ ++ #endif ++ ++ /*******************/ +diff --git a/package/kernel/mac80211/patches/549-ath9k_enable_gpio_buttons.patch b/package/kernel/mac80211/patches/549-ath9k_enable_gpio_buttons.patch +new file mode 100644 +index 0000000..0527406 +--- /dev/null ++++ b/package/kernel/mac80211/patches/549-ath9k_enable_gpio_buttons.patch +@@ -0,0 +1,148 @@ ++From: Michal Cieslakiewicz ++Subject: [PATCH v5 5/8] mac80211: ath9k: enable GPIO buttons ++ ++Enable platform-defined GPIO button support for ath9k device. ++Key poller is activated for attached platform buttons. ++Requires ath9k GPIO chip access. ++ ++Signed-off-by: Michal Cieslakiewicz ++Signed-off-by: Felix Fietkau ++--- ++--- a/drivers/net/wireless/ath/ath9k/ath9k.h +++++ b/drivers/net/wireless/ath/ath9k/ath9k.h ++@@ -1028,6 +1028,7 @@ struct ath_softc { ++ struct list_head leds; ++ #ifdef CONFIG_GPIOLIB ++ struct ath9k_gpio_chip *gpiochip; +++ struct platform_device *btnpdev; /* gpio-keys-polled */ ++ #endif ++ #endif ++ ++--- a/drivers/net/wireless/ath/ath9k/gpio.c +++++ b/drivers/net/wireless/ath/ath9k/gpio.c ++@@ -17,6 +17,8 @@ ++ #include "ath9k.h" ++ #include ++ #include +++#include +++#include ++ ++ #ifdef CPTCFG_MAC80211_LEDS ++ ++@@ -132,6 +134,63 @@ static void ath9k_unregister_gpio_chip(s ++ sc->gpiochip = NULL; ++ } ++ +++/******************/ +++/* GPIO Buttons */ +++/******************/ +++ +++/* add GPIO buttons */ +++static void ath9k_init_buttons(struct ath_softc *sc) +++{ +++ struct ath9k_platform_data *pdata = sc->dev->platform_data; +++ struct platform_device *pdev; +++ struct gpio_keys_platform_data gkpdata; +++ struct gpio_keys_button *bt; +++ int i; +++ +++ if (!sc->gpiochip) +++ return; +++ +++ if (!pdata || !pdata->btns || !pdata->num_btns) +++ return; +++ +++ bt = devm_kmemdup(sc->dev, pdata->btns, +++ pdata->num_btns * sizeof(struct gpio_keys_button), +++ GFP_KERNEL); +++ if (!bt) +++ return; +++ +++ for (i = 0; i < pdata->num_btns; i++) { +++ ath9k_hw_cfg_gpio_input(sc->sc_ah, pdata->btns[i].gpio); +++ bt[i].gpio = sc->gpiochip->gchip.base + pdata->btns[i].gpio; +++ } +++ +++ memset(&gkpdata, 0, sizeof(struct gpio_keys_platform_data)); +++ gkpdata.buttons = bt; +++ gkpdata.nbuttons = pdata->num_btns; +++ gkpdata.poll_interval = pdata->btn_poll_interval; +++ +++ pdev = platform_device_register_data(sc->dev, "gpio-keys-polled", +++ PLATFORM_DEVID_AUTO, &gkpdata, +++ sizeof(gkpdata)); +++ if (!IS_ERR_OR_NULL(pdev)) +++ sc->btnpdev = pdev; +++ else { +++ sc->btnpdev = NULL; +++ devm_kfree(sc->dev, bt); +++ } +++} +++ +++/* remove GPIO buttons */ +++static void ath9k_deinit_buttons(struct ath_softc *sc) +++{ +++ if (!sc->gpiochip || !sc->btnpdev) +++ return; +++ +++ platform_device_unregister(sc->btnpdev); +++ +++ sc->btnpdev = NULL; +++} +++ ++ #else /* CONFIG_GPIOLIB */ ++ ++ static inline void ath9k_register_gpio_chip(struct ath_softc *sc) ++@@ -142,6 +201,14 @@ static inline void ath9k_unregister_gpio ++ { ++ } ++ +++static inline void ath9k_init_buttons(struct ath_softc *sc) +++{ +++} +++ +++static inline void ath9k_deinit_buttons(struct ath_softc *sc) +++{ +++} +++ ++ #endif /* CONFIG_GPIOLIB */ ++ ++ /********************************/ ++@@ -246,6 +313,7 @@ void ath_deinit_leds(struct ath_softc *s ++ { ++ struct ath_led *led; ++ +++ ath9k_deinit_buttons(sc); ++ while (!list_empty(&sc->leds)) { ++ led = list_first_entry(&sc->leds, struct ath_led, list); ++ #ifdef CONFIG_GPIOLIB ++@@ -274,6 +342,7 @@ void ath_init_leds(struct ath_softc *sc) ++ return; ++ ++ ath9k_register_gpio_chip(sc); +++ ath9k_init_buttons(sc); ++ ++ if (pdata && pdata->led_name) ++ strncpy(led_name, pdata->led_name, sizeof(led_name)); ++@@ -289,7 +358,7 @@ void ath_init_leds(struct ath_softc *sc) ++ ath_create_gpio_led(sc, sc->sc_ah->led_pin, led_name, trigger, ++ !sc->sc_ah->config.led_active_high); ++ ++- if (!pdata) +++ if (!pdata || !pdata->leds || !pdata->num_leds) ++ return; ++ ++ for (i = 0; i < pdata->num_leds; i++) ++--- a/include/linux/ath9k_platform.h +++++ b/include/linux/ath9k_platform.h ++@@ -46,6 +46,10 @@ struct ath9k_platform_data { ++ int num_leds; ++ const struct gpio_led *leds; ++ const char *led_name; +++ +++ unsigned num_btns; +++ const struct gpio_keys_button *btns; +++ unsigned btn_poll_interval; ++ }; ++ ++ #endif /* _LINUX_ATH9K_PLATFORM_H */ +diff --git a/package/kernel/mac80211/patches/549-ath9k_enable_gpio_chip.patch b/package/kernel/mac80211/patches/549-ath9k_enable_gpio_chip.patch +deleted file mode 100644 +index 55bb991..0000000 +--- a/package/kernel/mac80211/patches/549-ath9k_enable_gpio_chip.patch ++++ /dev/null +@@ -1,243 +0,0 @@ +-From: Michal Cieslakiewicz +-Date: Sun, 31 Jan 2016 21:01:31 +0100 +-Subject: [PATCH v4 4/8] mac80211: ath9k: enable access to GPIO +- +-Enable access to GPIO chip and its pins for Atheros AR92xx +-wireless devices. For now AR9285 and AR9287 are supported. +- +-Signed-off-by: Michal Cieslakiewicz +---- +- ath9k.h | 23 ++++++++++++ +- gpio.c | 121 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +- init.c | 2 + +- 3 files changed, 146 insertions(+) +- +---- a/drivers/net/wireless/ath/ath9k/ath9k.h +-+++ b/drivers/net/wireless/ath/ath9k/ath9k.h +-@@ -24,6 +24,7 @@ +- #include +- #include +- #include +-+#include +- +- #include "common.h" +- #include "debug.h" +-@@ -817,6 +818,13 @@ void ath_fill_led_pin(struct ath_softc * +- int ath_create_gpio_led(struct ath_softc *sc, int gpio, const char *name, +- const char *trigger, bool active_low); +- +-+/***************/ +-+/* GPIO Chip */ +-+/***************/ +-+ +-+void ath9k_register_gpio_chip(struct ath_softc *sc); +-+void ath9k_unregister_gpio_chip(struct ath_softc *sc); +-+ +- #else +- static inline void ath_init_leds(struct ath_softc *sc) +- { +-@@ -828,6 +836,14 @@ static inline void ath_deinit_leds(struc +- static inline void ath_fill_led_pin(struct ath_softc *sc) +- { +- } +-+ +-+static inline void ath9k_register_gpio_chip(struct ath_softc *sc) +-+{ +-+} +-+ +-+static inline void ath9k_unregister_gpio_chip(struct ath_softc *sc) +-+{ +-+} +- #endif +- +- /************************/ +-@@ -963,6 +979,12 @@ struct ath_led { +- struct led_classdev cdev; +- }; +- +-+struct ath9k_gpio_chip { +-+ struct ath_softc *sc; +-+ char label[32]; +-+ struct gpio_chip gchip; +-+}; +-+ +- struct ath_softc { +- struct ieee80211_hw *hw; +- struct device *dev; +-@@ -1017,6 +1039,7 @@ struct ath_softc { +- #ifdef CPTCFG_MAC80211_LEDS +- const char *led_default_trigger; +- struct list_head leds; +-+ struct ath9k_gpio_chip *gpiochip; +- #endif +- +- #ifdef CPTCFG_ATH9K_DEBUGFS +---- a/drivers/net/wireless/ath/ath9k/gpio.c +-+++ b/drivers/net/wireless/ath/ath9k/gpio.c +-@@ -22,6 +22,9 @@ +- /********************************/ +- +- #ifdef CPTCFG_MAC80211_LEDS +-+ +-+#include +-+ +- static void ath_led_brightness(struct led_classdev *led_cdev, +- enum led_brightness brightness) +- { +-@@ -60,6 +63,10 @@ static int ath_add_led(struct ath_softc +- else +- ath9k_hw_set_gpio(sc->sc_ah, gpio->gpio, gpio->active_low); +- +-+ /* If there is GPIO chip configured, reserve LED pin */ +-+ if (sc->gpiochip) +-+ gpio_request(sc->gpiochip->gchip.base + gpio->gpio, gpio->name); +-+ +- return 0; +- } +- +-@@ -116,6 +123,9 @@ void ath_deinit_leds(struct ath_softc *s +- +- while (!list_empty(&sc->leds)) { +- led = list_first_entry(&sc->leds, struct ath_led, list); +-+ /* If there is GPIO chip configured, free LED pin */ +-+ if (sc->gpiochip) +-+ gpio_free(sc->gpiochip->gchip.base + led->gpio->gpio); +- list_del(&led->list); +- ath_led_brightness(&led->cdev, LED_OFF); +- led_classdev_unregister(&led->cdev); +-@@ -186,6 +196,117 @@ void ath_fill_led_pin(struct ath_softc * +- /* LED off, active low */ +- ath9k_hw_set_gpio(ah, ah->led_pin, (ah->config.led_active_high) ? 0 : 1); +- } +-+ +-+/***************/ +-+/* GPIO Chip */ +-+/***************/ +-+ +-+/* gpio_chip handler : set GPIO to input */ +-+static int ath9k_gpio_pin_cfg_input(struct gpio_chip *chip, unsigned offset) +-+{ +-+ struct ath9k_gpio_chip *gc = container_of(chip, struct ath9k_gpio_chip, +-+ gchip); +-+ +-+ ath9k_hw_cfg_gpio_input(gc->sc->sc_ah, offset); +-+ +-+ return 0; +-+} +-+ +-+/* gpio_chip handler : set GPIO to output */ +-+static int ath9k_gpio_pin_cfg_output(struct gpio_chip *chip, unsigned offset, +-+ int value) +-+{ +-+ struct ath9k_gpio_chip *gc = container_of(chip, struct ath9k_gpio_chip, +-+ gchip); +-+ +-+ ath9k_hw_cfg_output(gc->sc->sc_ah, offset, +-+ AR_GPIO_OUTPUT_MUX_AS_OUTPUT); +-+ ath9k_hw_set_gpio(gc->sc->sc_ah, offset, value); +-+ +-+ return 0; +-+} +-+ +-+/* gpio_chip handler : query GPIO direction (0=out, 1=in) */ +-+static int ath9k_gpio_pin_get_dir(struct gpio_chip *chip, unsigned offset) +-+{ +-+ struct ath9k_gpio_chip *gc = container_of(chip, struct ath9k_gpio_chip, +-+ gchip); +-+ struct ath_hw *ah = gc->sc->sc_ah; +-+ +-+ return !((REG_READ(ah, AR_GPIO_OE_OUT) >> (offset * 2)) & 3); +-+} +-+ +-+/* gpio_chip handler : get GPIO pin value */ +-+static int ath9k_gpio_pin_get(struct gpio_chip *chip, unsigned offset) +-+{ +-+ struct ath9k_gpio_chip *gc = container_of(chip, struct ath9k_gpio_chip, +-+ gchip); +-+ +-+ return ath9k_hw_gpio_get(gc->sc->sc_ah, offset); +-+} +-+ +-+/* gpio_chip handler : set GPIO pin to value */ +-+static void ath9k_gpio_pin_set(struct gpio_chip *chip, unsigned offset, +-+ int value) +-+{ +-+ struct ath9k_gpio_chip *gc = container_of(chip, struct ath9k_gpio_chip, +-+ gchip); +-+ +-+ ath9k_hw_set_gpio(gc->sc->sc_ah, offset, value); +-+} +-+ +-+/* register GPIO chip */ +-+void ath9k_register_gpio_chip(struct ath_softc *sc) +-+{ +-+ struct ath9k_gpio_chip *gc; +-+ u16 ng; +-+ +-+ /* for now only AR9285 and AR9287 are recognized */ +-+ if (AR_SREV_9287(sc->sc_ah)) +-+ ng = AR9287_NUM_GPIO; +-+ else if (AR_SREV_9285(sc->sc_ah)) +-+ ng = AR9285_NUM_GPIO; +-+ else +-+ return; +-+ +-+ gc = kzalloc(sizeof(struct ath9k_gpio_chip), GFP_KERNEL); +-+ if (!gc) +-+ return; +-+ +-+ snprintf(gc->label, sizeof(gc->label), "ath9k-%s", +-+ wiphy_name(sc->hw->wiphy)); +-+ gc->gchip.label = gc->label; +-+ gc->gchip.base = -1; /* determine base automatically */ +-+ gc->gchip.ngpio = ng; +-+ gc->gchip.direction_input = ath9k_gpio_pin_cfg_input; +-+ gc->gchip.direction_output = ath9k_gpio_pin_cfg_output; +-+ gc->gchip.get_direction = ath9k_gpio_pin_get_dir; +-+ gc->gchip.get = ath9k_gpio_pin_get; +-+ gc->gchip.set = ath9k_gpio_pin_set; +-+ gc->gchip.owner = THIS_MODULE; +-+ +-+ if (gpiochip_add(&gc->gchip)) { +-+ kfree(gc); +-+ return; +-+ } +-+ +-+ sc->gpiochip = gc; +-+ gc->sc = sc; +-+} +-+ +-+/* remove GPIO chip */ +-+void ath9k_unregister_gpio_chip(struct ath_softc *sc) +-+{ +-+ struct ath9k_gpio_chip *gc = sc->gpiochip; +-+ +-+ if (!gc) +-+ return; +-+ +-+ gpiochip_remove(&gc->gchip); +-+ kfree(gc); +-+ sc->gpiochip = NULL; +-+} +-+ +- #endif +- +- /*******************/ +---- a/drivers/net/wireless/ath/ath9k/init.c +-+++ b/drivers/net/wireless/ath/ath9k/init.c +-@@ -975,6 +975,7 @@ int ath9k_init_device(u16 devid, struct +- goto debug_cleanup; +- } +- +-+ ath9k_register_gpio_chip(sc); +- ath_init_leds(sc); +- ath_start_rfkill_poll(sc); +- +-@@ -1022,6 +1023,7 @@ void ath9k_deinit_device(struct ath_soft +- +- wiphy_rfkill_stop_polling(sc->hw->wiphy); +- ath_deinit_leds(sc); +-+ ath9k_unregister_gpio_chip(sc); +- +- ath9k_ps_restore(sc); +- +diff --git a/package/kernel/mac80211/patches/550-ath9k_enable_gpio_buttons.patch b/package/kernel/mac80211/patches/550-ath9k_enable_gpio_buttons.patch +deleted file mode 100644 +index e3a8cec..0000000 +--- a/package/kernel/mac80211/patches/550-ath9k_enable_gpio_buttons.patch ++++ /dev/null +@@ -1,169 +0,0 @@ +-From: Michal Cieslakiewicz +-Subject: [PATCH v5 5/8] mac80211: ath9k: enable GPIO buttons +- +-Enable platform-defined GPIO button support for ath9k device. +-Key poller is activated for attached platform buttons. +-Requires ath9k GPIO chip access. +- +-Signed-off-by: Michal Cieslakiewicz +---- +- drivers/net/wireless/ath/ath9k/ath9k.h | 16 ++++++ +- drivers/net/wireless/ath/ath9k/gpio.c | 77 +++++++++++++++++++++++++++++++++ +- drivers/net/wireless/ath/ath9k/init.c | 2 +- include/linux/ath9k_platform.h | 4 + +- 4 files changed, 99 insertions(+) +- +---- a/drivers/net/wireless/ath/ath9k/ath9k.h +-+++ b/drivers/net/wireless/ath/ath9k/ath9k.h +-@@ -825,6 +825,13 @@ int ath_create_gpio_led(struct ath_softc +- void ath9k_register_gpio_chip(struct ath_softc *sc); +- void ath9k_unregister_gpio_chip(struct ath_softc *sc); +- +-+/******************/ +-+/* GPIO Buttons */ +-+/******************/ +-+ +-+void ath9k_init_buttons(struct ath_softc *sc); +-+void ath9k_deinit_buttons(struct ath_softc *sc); +-+ +- #else +- static inline void ath_init_leds(struct ath_softc *sc) +- { +-@@ -844,6 +851,14 @@ static inline void ath9k_register_gpio_c +- static inline void ath9k_unregister_gpio_chip(struct ath_softc *sc) +- { +- } +-+ +-+static inline void ath9k_init_buttons(struct ath_softc *sc) +-+{ +-+} +-+ +-+static inline void ath9k_deinit_buttons(struct ath_softc *sc) +-+{ +-+} +- #endif +- +- /************************/ +-@@ -1040,6 +1055,7 @@ struct ath_softc { +- const char *led_default_trigger; +- struct list_head leds; +- struct ath9k_gpio_chip *gpiochip; +-+ struct platform_device *btnpdev; /* gpio-keys-polled */ +- #endif +- +- #ifdef CPTCFG_ATH9K_DEBUGFS +---- a/drivers/net/wireless/ath/ath9k/gpio.c +-+++ b/drivers/net/wireless/ath/ath9k/gpio.c +-@@ -24,6 +24,8 @@ +- #ifdef CPTCFG_MAC80211_LEDS +- +- #include +-+#include +-+#include +- +- static void ath_led_brightness(struct led_classdev *led_cdev, +- enum led_brightness brightness) +-@@ -159,7 +161,7 @@ void ath_init_leds(struct ath_softc *sc) +- ath_create_gpio_led(sc, sc->sc_ah->led_pin, led_name, trigger, +- !sc->sc_ah->config.led_active_high); +- +-- if (!pdata) +-+ if (!pdata || !pdata->leds || !pdata->num_leds) +- return; +- +- for (i = 0; i < pdata->num_leds; i++) +-@@ -307,6 +309,63 @@ void ath9k_unregister_gpio_chip(struct a +- sc->gpiochip = NULL; +- } +- +-+/******************/ +-+/* GPIO Buttons */ +-+/******************/ +-+ +-+/* add GPIO buttons */ +-+void ath9k_init_buttons(struct ath_softc *sc) +-+{ +-+ struct ath9k_platform_data *pdata = sc->dev->platform_data; +-+ struct platform_device *pdev; +-+ struct gpio_keys_platform_data gkpdata; +-+ struct gpio_keys_button *bt; +-+ int i; +-+ +-+ if (!sc->gpiochip) +-+ return; +-+ +-+ if (!pdata || !pdata->btns || !pdata->num_btns) +-+ return; +-+ +-+ bt = devm_kmemdup(sc->dev, pdata->btns, +-+ pdata->num_btns * sizeof(struct gpio_keys_button), +-+ GFP_KERNEL); +-+ if (!bt) +-+ return; +-+ +-+ for (i = 0; i < pdata->num_btns; i++) { +-+ ath9k_hw_cfg_gpio_input(sc->sc_ah, pdata->btns[i].gpio); +-+ bt[i].gpio = sc->gpiochip->gchip.base + pdata->btns[i].gpio; +-+ } +-+ +-+ memset(&gkpdata, 0, sizeof(struct gpio_keys_platform_data)); +-+ gkpdata.buttons = bt; +-+ gkpdata.nbuttons = pdata->num_btns; +-+ gkpdata.poll_interval = pdata->btn_poll_interval; +-+ +-+ pdev = platform_device_register_data(sc->dev, "gpio-keys-polled", +-+ PLATFORM_DEVID_AUTO, &gkpdata, +-+ sizeof(gkpdata)); +-+ if (!IS_ERR_OR_NULL(pdev)) +-+ sc->btnpdev = pdev; +-+ else { +-+ sc->btnpdev = NULL; +-+ devm_kfree(sc->dev, bt); +-+ } +-+} +-+ +-+/* remove GPIO buttons */ +-+void ath9k_deinit_buttons(struct ath_softc *sc) +-+{ +-+ if (!sc->gpiochip || !sc->btnpdev) +-+ return; +-+ +-+ platform_device_unregister(sc->btnpdev); +-+ +-+ sc->btnpdev = NULL; +-+} +-+ +- #endif +- +- /*******************/ +---- a/drivers/net/wireless/ath/ath9k/init.c +-+++ b/drivers/net/wireless/ath/ath9k/init.c +-@@ -977,6 +977,7 @@ int ath9k_init_device(u16 devid, struct +- +- ath9k_register_gpio_chip(sc); +- ath_init_leds(sc); +-+ ath9k_init_buttons(sc); +- ath_start_rfkill_poll(sc); +- +- return 0; +-@@ -1022,6 +1023,7 @@ void ath9k_deinit_device(struct ath_soft +- ath9k_ps_wakeup(sc); +- +- wiphy_rfkill_stop_polling(sc->hw->wiphy); +-+ ath9k_deinit_buttons(sc); +- ath_deinit_leds(sc); +- ath9k_unregister_gpio_chip(sc); +- +---- a/include/linux/ath9k_platform.h +-+++ b/include/linux/ath9k_platform.h +-@@ -46,6 +46,10 @@ struct ath9k_platform_data { +- int num_leds; +- const struct gpio_led *leds; +- const char *led_name; +-+ +-+ unsigned num_btns; +-+ const struct gpio_keys_button *btns; +-+ unsigned btn_poll_interval; +- }; +- +- #endif /* _LINUX_ATH9K_PLATFORM_H */ diff --git a/patches/openwrt/0010-ath9k-add-HSR-tuner-support-for-UniFi-Outdoor-Plus.patch b/patches/openwrt/0086-ath9k-add-HSR-tuner-support-for-UniFi-Outdoor-Plus.patch similarity index 93% rename from patches/openwrt/0010-ath9k-add-HSR-tuner-support-for-UniFi-Outdoor-Plus.patch rename to patches/openwrt/0086-ath9k-add-HSR-tuner-support-for-UniFi-Outdoor-Plus.patch index 3b74d88d..ba7ef419 100644 --- a/patches/openwrt/0010-ath9k-add-HSR-tuner-support-for-UniFi-Outdoor-Plus.patch +++ b/patches/openwrt/0086-ath9k-add-HSR-tuner-support-for-UniFi-Outdoor-Plus.patch @@ -6,7 +6,7 @@ Patch-by: Stefan Rompf diff --git a/package/kernel/mac80211/patches/931-ubnt-uap-plus-hsr.patch b/package/kernel/mac80211/patches/931-ubnt-uap-plus-hsr.patch new file mode 100644 -index 0000000..4533335 +index 0000000..14d63f1 --- /dev/null +++ b/package/kernel/mac80211/patches/931-ubnt-uap-plus-hsr.patch @@ -0,0 +1,346 @@ @@ -347,10 +347,10 @@ index 0000000..4533335 + ath9k-$(CPTCFG_ATH9K_PCI) += pci.o +--- a/include/linux/ath9k_platform.h ++++ b/include/linux/ath9k_platform.h -+@@ -44,6 +44,8 @@ struct ath9k_platform_data { -+ -+ int num_leds; -+ const struct gpio_led *leds; ++@@ -50,6 +50,8 @@ struct ath9k_platform_data { ++ unsigned num_btns; ++ const struct gpio_keys_button *btns; ++ unsigned btn_poll_interval; ++ ++ bool ubnt_hsr; + }; @@ -368,25 +368,16 @@ index 7803513..d865ed2 100644 + ap91_pci_init(ee, NULL); + + ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_unifi_outdoor_plus_leds_gpio), -diff --git a/target/linux/generic/patches-3.18/150-ath9k_ubnt_hsr_filter.patch b/target/linux/generic/patches-3.18/150-ath9k_ubnt_hsr_filter.patch -new file mode 100644 -index 0000000..a0ebbc7 ---- /dev/null -+++ b/target/linux/generic/patches-3.18/150-ath9k_ubnt_hsr_filter.patch -@@ -0,0 +1,16 @@ -+Flag that this platform is an Ubiquiti UniFi Outdoor Plus -+containing a RF filter in ath9k's receive path. +diff --git a/target/linux/generic/files/include/linux/ath9k_platform.h b/target/linux/generic/files/include/linux/ath9k_platform.h +index e543a64..2cb0288 100644 +--- a/target/linux/generic/files/include/linux/ath9k_platform.h ++++ b/target/linux/generic/files/include/linux/ath9k_platform.h +@@ -50,6 +50,8 @@ struct ath9k_platform_data { + unsigned num_btns; + const struct gpio_keys_button *btns; + unsigned btn_poll_interval; + -+Signed-off-by: Stefan Rompf -+ -+--- a/include/linux/ath9k_platform.h -++++ b/include/linux/ath9k_platform.h -+@@ -44,6 +44,8 @@ struct ath9k_platform_data { -+ -+ int num_leds; -+ const struct gpio_led *leds; -++ -++ bool ubnt_hsr; -+ }; -+ -+ #endif /* _LINUX_ATH9K_PLATFORM_H */ ++ bool ubnt_hsr; + }; + + #endif /* _LINUX_ATH9K_PLATFORM_H */