summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libre/linux-libre/PKGBUILD8
-rw-r--r--libre/linux-libre/ath9k_htc-fix-target-is-unresponsive.patch67
2 files changed, 74 insertions, 1 deletions
diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD
index 78293fad3..c28f53521 100644
--- a/libre/linux-libre/PKGBUILD
+++ b/libre/linux-libre/PKGBUILD
@@ -12,7 +12,7 @@ pkgbase=linux-libre # Build stock -LIBRE kernel
_basekernel=3.9
_sublevel=9
pkgver=${_basekernel}.${_sublevel}
-pkgrel=1
+pkgrel=1.1
_lxopkgver=${_basekernel}.8 # nearly always the same as pkgver
arch=('i686' 'x86_64' 'mips64el')
url="http://linux-libre.fsfla.org/"
@@ -29,6 +29,7 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn
'Kbuild.platforms'
'boot-logo.patch'
'change-default-console-loglevel.patch'
+ 'ath9k_htc-fix-target-is-unresponsive.patch'
"http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/linux-patches-${_lxopkgver}-gnu_0loongsonlibre_mipsel.tar.bz2")
md5sums=('120df29f88622dabf7015a22c7cc8e25'
'e143fc381f4d2fdfc18686b867a5e6a5'
@@ -39,6 +40,7 @@ md5sums=('120df29f88622dabf7015a22c7cc8e25'
'8267264d9a8966e57fdacd1fa1fc65c4'
'04b21c79df0a952c22d681dd4f4562df'
'f3def2cefdcbb954c21d8505d23cc83c'
+ 'db6ad371bb61e04b960c453d95e1d5cd'
'30092ce96affb12f89a9eddfad966741')
if [ "$CARCH" != "mips64el" ]; then
# Don't use the Loongson-specific patches on non-mips64el arches.
@@ -64,6 +66,10 @@ prepare() {
# (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227)
patch -Np1 -i "${srcdir}/change-default-console-loglevel.patch"
+ # fix "ath9k_htc: Target is unresponsive"
+ # https://github.com/qca/open-ath9k-htc-firmware/issues/1
+ patch -Np1 -i "${srcdir}/ath9k_htc-fix-target-is-unresponsive.patch"
+
if [ "$CARCH" == "mips64el" ]; then
sed -i "s|^EXTRAVERSION.*|EXTRAVERSION =-libre|" Makefile
sed -r "s|^( SUBLEVEL = ).*|\1$_sublevel|" \
diff --git a/libre/linux-libre/ath9k_htc-fix-target-is-unresponsive.patch b/libre/linux-libre/ath9k_htc-fix-target-is-unresponsive.patch
new file mode 100644
index 000000000..ff6bb410e
--- /dev/null
+++ b/libre/linux-libre/ath9k_htc-fix-target-is-unresponsive.patch
@@ -0,0 +1,67 @@
+diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c
+index f5dda84..90ce6f3 100644
+--- a/drivers/net/wireless/ath/ath9k/hif_usb.c
++++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
+@@ -1124,7 +1124,7 @@ static void ath9k_hif_usb_firmware_cb(const struct firmware *fw, void *context)
+ }
+
+ release_firmware(fw);
+- hif_dev->flags |= HIF_USB_READY;
++ hif_dev->flags |= HIF_USB_FW_LOADED;
+ complete(&hif_dev->fw_done);
+
+ return;
+@@ -1281,7 +1281,7 @@ static void ath9k_hif_usb_disconnect(struct usb_interface *interface)
+
+ wait_for_completion(&hif_dev->fw_done);
+
+- if (hif_dev->flags & HIF_USB_READY) {
++ if (hif_dev->flags & HIF_USB_FW_LOADED) {
+ ath9k_htc_hw_deinit(hif_dev->htc_handle, unplugged);
+ ath9k_htc_hw_free(hif_dev->htc_handle);
+ ath9k_hif_usb_dev_deinit(hif_dev);
+@@ -1289,7 +1289,9 @@ static void ath9k_hif_usb_disconnect(struct usb_interface *interface)
+
+ usb_set_intfdata(interface, NULL);
+
+- if (!unplugged && (hif_dev->flags & HIF_USB_START))
++ /* If firmware was loaded we should drop it
++ * go back to first stage bootloader. */
++ if (!unplugged && (hif_dev->flags & HIF_USB_FW_LOADED))
+ ath9k_hif_usb_reboot(udev);
+
+ kfree(hif_dev);
+@@ -1326,7 +1328,7 @@ static int ath9k_hif_usb_resume(struct usb_interface *interface)
+ if (ret)
+ return ret;
+
+- if (hif_dev->flags & HIF_USB_READY) {
++ if (hif_dev->flags & HIF_USB_FW_LOADED) {
+ /* request cached firmware during suspend/resume cycle */
+ ret = request_firmware(&fw, hif_dev->fw_name,
+ &hif_dev->udev->dev);
+diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.h b/drivers/net/wireless/ath/ath9k/hif_usb.h
+index 51496e7..d74697d 100644
+--- a/drivers/net/wireless/ath/ath9k/hif_usb.h
++++ b/drivers/net/wireless/ath/ath9k/hif_usb.h
+@@ -85,7 +85,7 @@ struct cmd_buf {
+ };
+
+ #define HIF_USB_START BIT(0)
+-#define HIF_USB_READY BIT(1)
++#define HIF_USB_FW_LOADED BIT(1)
+
+ struct hif_device_usb {
+ struct usb_device *udev;
+diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
+index a47f5e0..9b6a8c7 100644
+--- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c
++++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
+@@ -846,6 +846,7 @@ static int ath9k_init_device(struct ath9k_htc_priv *priv,
+ if (error != 0)
+ goto err_rx;
+
++ ath9k_hw_disable(priv->ah);
+ #ifdef CONFIG_MAC80211_LEDS
+ /* must be initialized before ieee80211_register_hw */
+ priv->led_cdev.default_trigger = ieee80211_create_tpt_led_trigger(priv->hw,