This adds the following patches by Sujith Manoharan from ath9k-devel:

ath9k: Add QCA953x WMAC platform support
ath9k: Disable AR_INTR_SYNC_HOST1_FATAL for QCA953x
ath9k: Fix temperature compensation
Signed-off-by: Matthias Schiffer <[email protected]>
---
 .../patches/567-ath9k-qca953x-support.patch        | 124 +++++++++++++++++++++
 1 file changed, 124 insertions(+)
 create mode 100644 
package/kernel/mac80211/patches/567-ath9k-qca953x-support.patch

diff --git a/package/kernel/mac80211/patches/567-ath9k-qca953x-support.patch 
b/package/kernel/mac80211/patches/567-ath9k-qca953x-support.patch
new file mode 100644
index 0000000..e73083a
--- /dev/null
+++ b/package/kernel/mac80211/patches/567-ath9k-qca953x-support.patch
@@ -0,0 +1,124 @@
+--- a/drivers/net/wireless/ath/ath9k/ahb.c
++++ b/drivers/net/wireless/ath/ath9k/ahb.c
+@@ -39,6 +39,10 @@ static const struct platform_device_id a
+               .name = "qca955x_wmac",
+               .driver_data = AR9300_DEVID_QCA955X,
+       },
++      {
++              .name = "qca953x_wmac",
++              .driver_data = AR9300_DEVID_AR953X,
++      },
+       {},
+ };
+ 
+--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+@@ -4792,43 +4792,54 @@ static void ar9003_hw_power_control_over
+ 
+ tempslope:
+       if (AR_SREV_9550(ah) || AR_SREV_9531(ah)) {
++              u8 txmask = (eep->baseEepHeader.txrxMask & 0xf0) >> 4;
++
+               /*
+                * AR955x has tempSlope register for each chain.
+                * Check whether temp_compensation feature is enabled or not.
+                */
+               if (eep->baseEepHeader.featureEnable & 0x1) {
+                       if (frequency < 4000) {
+-                              REG_RMW_FIELD(ah, AR_PHY_TPC_19,
+-                                            AR_PHY_TPC_19_ALPHA_THERM,
+-                                            eep->base_ext2.tempSlopeLow);
+-                              REG_RMW_FIELD(ah, AR_PHY_TPC_19_B1,
+-                                            AR_PHY_TPC_19_ALPHA_THERM,
+-                                            temp_slope);
+-                              REG_RMW_FIELD(ah, AR_PHY_TPC_19_B2,
+-                                            AR_PHY_TPC_19_ALPHA_THERM,
+-                                            eep->base_ext2.tempSlopeHigh);
++                              if (txmask & BIT(0))
++                                      REG_RMW_FIELD(ah, AR_PHY_TPC_19,
++                                                    AR_PHY_TPC_19_ALPHA_THERM,
++                                                    
eep->base_ext2.tempSlopeLow);
++                              if (txmask & BIT(1))
++                                      REG_RMW_FIELD(ah, AR_PHY_TPC_19_B1,
++                                                    AR_PHY_TPC_19_ALPHA_THERM,
++                                                    temp_slope);
++                              if (txmask & BIT(2))
++                                      REG_RMW_FIELD(ah, AR_PHY_TPC_19_B2,
++                                                    AR_PHY_TPC_19_ALPHA_THERM,
++                                                    
eep->base_ext2.tempSlopeHigh);
+                       } else {
+-                              REG_RMW_FIELD(ah, AR_PHY_TPC_19,
+-                                            AR_PHY_TPC_19_ALPHA_THERM,
+-                                            temp_slope);
+-                              REG_RMW_FIELD(ah, AR_PHY_TPC_19_B1,
+-                                            AR_PHY_TPC_19_ALPHA_THERM,
+-                                            temp_slope1);
+-                              REG_RMW_FIELD(ah, AR_PHY_TPC_19_B2,
+-                                            AR_PHY_TPC_19_ALPHA_THERM,
+-                                            temp_slope2);
++                              if (txmask & BIT(0))
++                                      REG_RMW_FIELD(ah, AR_PHY_TPC_19,
++                                                    AR_PHY_TPC_19_ALPHA_THERM,
++                                                    temp_slope);
++                              if (txmask & BIT(1))
++                                      REG_RMW_FIELD(ah, AR_PHY_TPC_19_B1,
++                                                    AR_PHY_TPC_19_ALPHA_THERM,
++                                                    temp_slope1);
++                              if (txmask & BIT(2))
++                                      REG_RMW_FIELD(ah, AR_PHY_TPC_19_B2,
++                                                    AR_PHY_TPC_19_ALPHA_THERM,
++                                                    temp_slope2);
+                       }
+               } else {
+                       /*
+                        * If temp compensation is not enabled,
+                        * set all registers to 0.
+                        */
+-                      REG_RMW_FIELD(ah, AR_PHY_TPC_19,
+-                                    AR_PHY_TPC_19_ALPHA_THERM, 0);
+-                      REG_RMW_FIELD(ah, AR_PHY_TPC_19_B1,
+-                                    AR_PHY_TPC_19_ALPHA_THERM, 0);
+-                      REG_RMW_FIELD(ah, AR_PHY_TPC_19_B2,
+-                                    AR_PHY_TPC_19_ALPHA_THERM, 0);
++                      if (txmask & BIT(0))
++                              REG_RMW_FIELD(ah, AR_PHY_TPC_19,
++                                            AR_PHY_TPC_19_ALPHA_THERM, 0);
++                      if (txmask & BIT(1))
++                              REG_RMW_FIELD(ah, AR_PHY_TPC_19_B1,
++                                            AR_PHY_TPC_19_ALPHA_THERM, 0);
++                      if (txmask & BIT(2))
++                              REG_RMW_FIELD(ah, AR_PHY_TPC_19_B2,
++                                            AR_PHY_TPC_19_ALPHA_THERM, 0);
+               }
+       } else {
+               REG_RMW_FIELD(ah, AR_PHY_TPC_19,
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -901,7 +901,7 @@ static void ath9k_hw_init_interrupt_mask
+               AR_IMR_RXORN |
+               AR_IMR_BCNMISC;
+ 
+-      if (AR_SREV_9340(ah) || AR_SREV_9550(ah))
++      if (AR_SREV_9340(ah) || AR_SREV_9550(ah) || AR_SREV_9531(ah))
+               sync_default &= ~AR_INTR_SYNC_HOST1_FATAL;
+ 
+       if (AR_SREV_9300_20_OR_LATER(ah)) {
+@@ -3104,6 +3104,7 @@ static struct {
+       { AR_SREV_VERSION_9462,         "9462" },
+       { AR_SREV_VERSION_9550,         "9550" },
+       { AR_SREV_VERSION_9565,         "9565" },
++      { AR_SREV_VERSION_9531,         "9531" },
+ };
+ 
+ /* For devices with external radios */
+--- a/drivers/net/wireless/ath/ath9k/mac.c
++++ b/drivers/net/wireless/ath/ath9k/mac.c
+@@ -837,7 +837,7 @@ void ath9k_hw_enable_interrupts(struct a
+               return;
+       }
+ 
+-      if (AR_SREV_9340(ah) || AR_SREV_9550(ah))
++      if (AR_SREV_9340(ah) || AR_SREV_9550(ah) || AR_SREV_9531(ah))
+               sync_default &= ~AR_INTR_SYNC_HOST1_FATAL;
+ 
+       async_mask = AR_INTR_MAC_IRQ;
-- 
1.9.1
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to