0044-mac80211-mt76-ath10k-ct-ath10k-firmware-backport-from-LEDE-df3295f50e54909090846de12f7deb3ff8de6557.patch 200 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670
  1. From: Matthias Schiffer <mschiffer@universe-factory.net>
  2. Date: Tue, 15 Aug 2017 00:18:21 +0200
  3. Subject: mac80211, mt76, ath10k-ct, ath10k-firmware: backport from LEDE df3295f50e54909090846de12f7deb3ff8de6557
  4. diff --git a/package/firmware/ath10k-firmware/Makefile b/package/firmware/ath10k-firmware/Makefile
  5. index 8bf5729fff16677ef6449498f1df3cda19272583..16d77a398fbd3cbed6371e2cf977e2d8c4cfda36 100644
  6. --- a/package/firmware/ath10k-firmware/Makefile
  7. +++ b/package/firmware/ath10k-firmware/Makefile
  8. @@ -8,9 +8,9 @@
  9. include $(TOPDIR)/rules.mk
  10. PKG_NAME:=ath10k-firmware
  11. -PKG_SOURCE_DATE:=2017-01-11
  12. -PKG_SOURCE_VERSION:=ab432c60437931a165f0aff1a6e3371f358b75dd
  13. -PKG_MIRROR_HASH:=e3188ecd4d7470d3cdde89fefa6258f9ec4f404b23558d1474e5014679b28101
  14. +PKG_SOURCE_DATE:=2017-03-29
  15. +PKG_SOURCE_VERSION:=956e2609b7e42c8c710bba10ef925a5be1be5137
  16. +PKG_MIRROR_HASH:=25f724ff38c830281b3efba4a4ddffaae0c4bd8fea0f4c1061591229ff05535b
  17. PKG_RELEASE:=1
  18. PKG_SOURCE_PROTO:=git
  19. @@ -32,6 +32,11 @@ $(Package/ath10k-firmware-default)
  20. TITLE:=ath10k firmware for QCA9887 devices
  21. endef
  22. +define Package/ath10k-firmware-qca9888
  23. +$(Package/ath10k-firmware-default)
  24. + TITLE:=ath10k firmware for QCA9888 devices
  25. +endef
  26. +
  27. define Package/ath10k-firmware-qca9887-ct
  28. $(Package/ath10k-firmware-default)
  29. TITLE:=ath10k-CT firmware for QCA9887 devices
  30. @@ -76,34 +81,41 @@ define Download/ct-firmware
  31. URL_FILE:=$($(1)_FIRMWARE_FILE_CT)
  32. endef
  33. -QCA988X_FIRMWARE_FILE_CT:=firmware-2-ct-full-community.bin-19-rc3-lede
  34. +QCA988X_FIRMWARE_FILE_CT:=firmware-2-ct-full-community.bin-19-rc5-lede
  35. define Download/ath10k-firmware-qca988x-ct
  36. $(call Download/ct-firmware,QCA988X,)
  37. - HASH:=4112d78161a2c20e7a9490ea8d04e9f919508bafb097d88761dcce026c26f93f
  38. + HASH:=556d6a4df50cd94a229a240d6d1d108ed5910069902f1e0cbb57b02ede27690f
  39. endef
  40. $(eval $(call Download,ath10k-firmware-qca988x-ct))
  41. -QCA9887_FIRMWARE_FILE_CT:=firmware-2-ct-full-community.bin-19-rc3-lede
  42. +QCA9887_FIRMWARE_FILE_CT:=firmware-2-ct-full-community.bin-19-rc5-lede
  43. define Download/ath10k-firmware-qca9887-ct
  44. $(call Download/ct-firmware,QCA9887,ath10k-9887)
  45. - HASH:=18b61875726d4384de46f75dec1d42fea31aa6d66dba4940cb9d375bc98732e4
  46. + HASH:=725982694156e0b891dcd1b1b18ba5318fbbe173f4ec9603ff7acbd08f7c4050
  47. endef
  48. $(eval $(call Download,ath10k-firmware-qca9887-ct))
  49. -QCA99X0_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-9.bin-lede.001
  50. +QCA99X0_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-9.bin-lede.002
  51. define Download/ath10k-firmware-qca99x0-ct
  52. $(call Download/ct-firmware,QCA99X0,ath10k-10-4)
  53. - HASH:=61ff2b52617ae805579f423d6539284f056aba2b9f7e3629d600f6a5077ab703
  54. + HASH:=e3c77077b47d55219f90816a51bf046f5b40c32be5e96bf629b083d873a879ad
  55. endef
  56. $(eval $(call Download,ath10k-firmware-qca99x0-ct))
  57. -QCA9984_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-9.bin-lede.001
  58. +QCA9984_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-9.bin-lede.002
  59. define Download/ath10k-firmware-qca9984-ct
  60. $(call Download/ct-firmware,QCA9984,ath10k-9984-10-4)
  61. - HASH:=e079db5059cf28979ff50c7f6706df87e96a375e8048deeb4f6ede5357577f74
  62. + HASH:=610f7747db6b101f4fc21431b776ac640b5977357e5be9aece2349447b9b1d85
  63. endef
  64. $(eval $(call Download,ath10k-firmware-qca9984-ct))
  65. +QCA9888_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-9.bin-lede.002
  66. +define Download/ath10k-firmware-qca9888-ct
  67. + $(call Download/ct-firmware,QCA9888,ath10k-9888-10-4)
  68. + HASH:=f92e7d7968698af7c6f2d76b31b3645589e03839e15838010ce457c635e5aae6
  69. +endef
  70. +$(eval $(call Download,ath10k-firmware-qca9888-ct))
  71. +
  72. define Package/ath10k-firmware-qca99x0
  73. $(Package/ath10k-firmware-default)
  74. TITLE:=ath10k firmware for QCA99x0 devices
  75. @@ -158,6 +170,14 @@ This firmware conflicts with the standard 9984 firmware, so select only
  76. one.
  77. endef
  78. +define Package/ath10k-firmware-qca9888-ct/description
  79. +Alternative ath10k firmware for QCA9886 and QCA9888 from Candela Technologies.
  80. +Enables IBSS and other features. See:
  81. +http://www.candelatech.com/ath10k-10.4.php
  82. +This firmware conflicts with the standard 9886 and 9888 firmware, so select only
  83. +one.
  84. +endef
  85. +
  86. define Package/ath10k-firmware-qca99x0/description
  87. Standard ath10k firmware for QCA99x0 from QCA
  88. This firmware conflicts with the CT 99x0 firmware, so select only
  89. @@ -178,6 +198,13 @@ $(Package/ath10k-firmware-default)
  90. CATEGORY:=Firmware
  91. endef
  92. +define Package/ath10k-firmware-qca9888-ct
  93. +$(Package/ath10k-firmware-default)
  94. + TITLE:=ath10k CT 10.4.3 firmware for QCA9886 and QCA9888 devices
  95. + SECTION:=firmware
  96. + CATEGORY:=Firmware
  97. +endef
  98. +
  99. define Package/ath10k-firmware-qca9984
  100. $(Package/ath10k-firmware-default)
  101. TITLE:=ath10k firmware for QCA9984 devices
  102. @@ -185,6 +212,13 @@ $(Package/ath10k-firmware-default)
  103. CATEGORY:=Firmware
  104. endef
  105. +define Package/ath10k-firmware-qca4019
  106. +$(Package/ath10k-firmware-default)
  107. + TITLE:=ath10k firmware for IPQ/QCA4019 devices
  108. + SECTION:=firmware
  109. + CATEGORY:=Firmware
  110. +endef
  111. +
  112. define Package/ath10k-firmware-qca6174
  113. $(Package/ath10k-firmware-default)
  114. TITLE:=ath10k firmware for QCA6174 devices
  115. @@ -203,31 +237,18 @@ define Download/qca99x0-board
  116. endef
  117. $(eval $(call Download,qca99x0-board))
  118. -QCA9984_BOARD_REV:=719c0127e52bd70559e71b85ab0331790e1bf66c
  119. -QCA9984_BOARD_FILE:=board-2.bin
  120. -QCA9984_BOARD_FILE_DL:=$(QCA9984_BOARD_FILE).$(QCA9984_BOARD_REV)
  121. -QCA9984_FIRMWARE_REV:=d43cb1188154037506e94abf3aa456cc934c6861
  122. -QCA9984_FIRMWARE_FILE:=firmware-5.bin_10.4-3.4-00072
  123. -QCA9984_FIRMWARE_FILE_DL:=$(QCA9984_FIRMWARE_FILE).$(QCA9984_FIRMWARE_REV)
  124. -
  125. -define Download/ath10k-qca9984-board
  126. - URL:=https://source.codeaurora.org/quic/qsdk/oss/firmware/ath10k-firmware/plain/ath10k/QCA9984/hw1.0/
  127. - URL_FILE:=$(QCA9984_BOARD_FILE)?id=$(QCA9984_BOARD_REV)
  128. - FILE:=$(QCA9984_BOARD_FILE_DL)
  129. - HASH:=e968b214fd76d5b7859f71841ce40fbd5f47336c3ccbaf95e23f902f5e569aef
  130. -endef
  131. -$(eval $(call Download,ath10k-qca9984-board))
  132. +define Build/Compile
  133. -define Download/ath10k-qca9984-firmware
  134. - URL:=https://source.codeaurora.org/quic/qsdk/oss/firmware/ath10k-firmware/plain/ath10k/QCA9984/hw1.0/
  135. - URL_FILE:=$(QCA9984_FIRMWARE_FILE)?id=$(QCA9984_FIRMWARE_REV)
  136. - FILE:=$(QCA9984_FIRMWARE_FILE_DL)
  137. - HASH:=28d5834e8c4ca8fcef9ea033cd8b9b0f9ee84ecf30dbde84c9c64bf8dd9912bc
  138. endef
  139. -$(eval $(call Download,ath10k-qca9984-firmware))
  140. -
  141. -define Build/Compile
  142. +define Package/ath10k-firmware-qca4019/install
  143. + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA4019/hw1.0
  144. + $(INSTALL_DATA) \
  145. + $(PKG_BUILD_DIR)/QCA4019/hw1.0/board-2.bin \
  146. + $(1)/lib/firmware/ath10k/QCA4019/hw1.0/
  147. + $(INSTALL_DATA) \
  148. + $(PKG_BUILD_DIR)/QCA4019/hw1.0/3.2.1/firmware-5.bin_10.4-3.2.1-00053 \
  149. + $(1)/lib/firmware/ath10k/QCA4019/hw1.0/firmware-5.bin
  150. endef
  151. define Package/ath10k-firmware-qca9887/install
  152. @@ -240,13 +261,26 @@ define Package/ath10k-firmware-qca9887/install
  153. $(1)/lib/firmware/ath10k/QCA9887/hw1.0/board.bin
  154. endef
  155. +define Package/ath10k-firmware-qca9888/install
  156. + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9888/hw2.0
  157. + $(INSTALL_DATA) \
  158. + $(PKG_BUILD_DIR)/QCA9888/hw2.0/board-2.bin \
  159. + $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board-2.bin
  160. + $(INSTALL_DATA) \
  161. + $(PKG_BUILD_DIR)/QCA9888/hw2.0/board-2.bin \
  162. + $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board.bin
  163. + $(INSTALL_DATA) \
  164. + $(PKG_BUILD_DIR)/QCA9888/hw2.0/firmware-5.bin_10.4-3.2-00072 \
  165. + $(1)/lib/firmware/ath10k/QCA9888/hw2.0/firmware-5.bin
  166. +endef
  167. +
  168. define Package/ath10k-firmware-qca988x/install
  169. $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA988X/hw2.0
  170. $(INSTALL_DATA) \
  171. $(PKG_BUILD_DIR)/QCA988X/hw2.0/board.bin \
  172. $(1)/lib/firmware/ath10k/QCA988X/hw2.0/
  173. $(INSTALL_DATA) \
  174. - $(PKG_BUILD_DIR)/QCA988X/hw2.0/10.2.4-1.0/firmware-5.bin_10.2.4-1.0-00016 \
  175. + $(PKG_BUILD_DIR)/QCA988X/hw2.0/10.2.4-1.0/firmware-5.bin_10.2.4-1.0-00029 \
  176. $(1)/lib/firmware/ath10k/QCA988X/hw2.0/firmware-5.bin
  177. endef
  178. @@ -303,22 +337,16 @@ endef
  179. define Package/ath10k-firmware-qca9984/install
  180. $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9984/hw1.0
  181. - ln -s \
  182. - ../../cal-pci-0000:01:00.0.bin \
  183. - $(1)/lib/firmware/ath10k/QCA9984/hw1.0/board.bin
  184. $(INSTALL_DATA) \
  185. - $(DL_DIR)/$(QCA9984_BOARD_FILE_DL) \
  186. + $(PKG_BUILD_DIR)/QCA9984/hw1.0/board-2.bin \
  187. $(1)/lib/firmware/ath10k/QCA9984/hw1.0/board-2.bin
  188. $(INSTALL_DATA) \
  189. - $(DL_DIR)/$(QCA9984_FIRMWARE_FILE_DL) \
  190. + $(PKG_BUILD_DIR)/QCA9984/hw1.0/3.4/firmware-5.bin_10.4-3.4-00082 \
  191. $(1)/lib/firmware/ath10k/QCA9984/hw1.0/firmware-5.bin
  192. endef
  193. define Package/ath10k-firmware-qca9984-ct/install
  194. $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9984/hw1.0
  195. - ln -s \
  196. - ../../cal-pci-0000:01:00.0.bin \
  197. - $(1)/lib/firmware/ath10k/QCA9984/hw1.0/board.bin
  198. $(INSTALL_DATA) \
  199. $(PKG_BUILD_DIR)/QCA9984/hw1.0/board-2.bin \
  200. $(1)/lib/firmware/ath10k/QCA9984/hw1.0/board-2.bin
  201. @@ -327,13 +355,29 @@ define Package/ath10k-firmware-qca9984-ct/install
  202. $(1)/lib/firmware/ath10k/QCA9984/hw1.0/firmware-5.bin
  203. endef
  204. +define Package/ath10k-firmware-qca9888-ct/install
  205. + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9888/hw2.0
  206. + ln -s \
  207. + ../../cal-pci-0000:01:00.0.bin \
  208. + $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board.bin
  209. + $(INSTALL_DATA) \
  210. + $(PKG_BUILD_DIR)/QCA9888/hw2.0/board-2.bin \
  211. + $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board-2.bin
  212. + $(INSTALL_DATA) \
  213. + $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA9888) \
  214. + $(1)/lib/firmware/ath10k/QCA9888/hw2.0/firmware-5.bin
  215. +endef
  216. +
  217. $(eval $(call BuildPackage,ath10k-firmware-qca9887))
  218. +$(eval $(call BuildPackage,ath10k-firmware-qca9888))
  219. $(eval $(call BuildPackage,ath10k-firmware-qca988x))
  220. $(eval $(call BuildPackage,ath10k-firmware-qca99x0))
  221. $(eval $(call BuildPackage,ath10k-firmware-qca6174))
  222. $(eval $(call BuildPackage,ath10k-firmware-qca9984))
  223. +$(eval $(call BuildPackage,ath10k-firmware-qca4019))
  224. $(eval $(call BuildPackage,ath10k-firmware-qca9887-ct))
  225. $(eval $(call BuildPackage,ath10k-firmware-qca988x-ct))
  226. $(eval $(call BuildPackage,ath10k-firmware-qca99x0-ct))
  227. $(eval $(call BuildPackage,ath10k-firmware-qca9984-ct))
  228. +$(eval $(call BuildPackage,ath10k-firmware-qca9888-ct))
  229. diff --git a/package/kernel/ath10k-ct/Makefile b/package/kernel/ath10k-ct/Makefile
  230. index 4ec49c326560f55d0ab66419fac89744ea5f9535..85fe4eb4638bc286d8e6486731e255ceb7ce5694 100644
  231. --- a/package/kernel/ath10k-ct/Makefile
  232. +++ b/package/kernel/ath10k-ct/Makefile
  233. @@ -8,9 +8,9 @@ PKG_LICENSE_FILES:=
  234. PKG_SOURCE_URL:=https://github.com/greearb/ath10k-ct.git
  235. PKG_SOURCE_PROTO:=git
  236. -PKG_SOURCE_DATE:=2017-01-26
  237. -PKG_SOURCE_VERSION:=d2bc84ff277936c58231f0c2280242eda4199e63
  238. -PKG_MIRROR_HASH:=6b734b987db00b97b06faca686dcebc56fb23b93093afbb35d5cf534987269bf
  239. +PKG_SOURCE_DATE:=2017-05-16
  240. +PKG_SOURCE_VERSION:=c048ef0c3eedf99b41bc12b3f4e47ef3d9fab484
  241. +PKG_MIRROR_HASH:=7936293962a10a0da7469759623013fc151019a6a584cfc6416bc0b605bd74d7
  242. PKG_MAINTAINER:=Ben Greear <greearb@candelatech.com>
  243. PKG_BUILD_PARALLEL:=1
  244. diff --git a/package/kernel/mac80211/Makefile b/package/kernel/mac80211/Makefile
  245. index 8ec05a343a4df23ef43411b5074ea1b4fe10d5f5..1ac390d337c23cfb33be5f19de3281a4d83263f3 100644
  246. --- a/package/kernel/mac80211/Makefile
  247. +++ b/package/kernel/mac80211/Makefile
  248. @@ -42,8 +42,8 @@ PKG_DRIVERS = \
  249. rt2800-lib rt2800-mmio rt2800-pci rt2800-soc rt2800-usb \
  250. rt61-pci rt73-usb \
  251. rtl8180 rtl8187 \
  252. - rtlwifi rtlwifi-pci rtlwifi-usb rtl8192c-common rtl8192ce rtl8192se \
  253. - rtl8192de rtl8192cu \
  254. + rtlwifi rtlwifi-pci rtlwifi-btcoexist rtlwifi-usb rtl8192c-common \
  255. + rtl8192ce rtl8192se rtl8192de rtl8192cu rtl8821ae \
  256. rtl8xxxu \
  257. wlcore wl12xx wl18xx \
  258. zd1211rw
  259. @@ -278,7 +278,7 @@ endef
  260. define KernelPackage/ath10k
  261. $(call KernelPackage/mac80211/Default)
  262. TITLE:=Atheros 802.11ac wireless cards support
  263. - URL:=https://wireless.wiki.kernel.org/en/users/Drivers/ath10k
  264. + URL:=https://wireless.wiki.kernel.org/en/users/drivers/ath10k
  265. DEPENDS+= @PCI_SUPPORT +kmod-ath +@DRIVER_11N_SUPPORT +@DRIVER_11AC_SUPPORT +@DRIVER_11W_SUPPORT +@KERNEL_RELAY
  266. FILES:= \
  267. $(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath10k/ath10k_core.ko \
  268. @@ -689,7 +689,7 @@ define KernelPackage/brcmfmac
  269. TITLE:=Broadcom IEEE802.11n USB FullMAC WLAN driver
  270. URL:=https://wireless.wiki.kernel.org/en/users/drivers/brcm80211
  271. DEPENDS+= @USB_SUPPORT +kmod-cfg80211 +@DRIVER_11N_SUPPORT +@DRIVER_11AC_SUPPORT +kmod-brcmutil \
  272. - +BRCMFMAC_SDIO:kmod-mmc \
  273. + +BRCMFMAC_SDIO:kmod-mmc @!TARGET_uml \
  274. +BRCMFMAC_USB:kmod-usb-core +BRCMFMAC_USB:brcmfmac-firmware-usb
  275. FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
  276. AUTOLOAD:=$(call AutoProbe,brcmfmac)
  277. @@ -1042,7 +1042,7 @@ endef
  278. define KernelPackage/mwl8k
  279. $(call KernelPackage/mac80211/Default)
  280. TITLE:=Driver for Marvell TOPDOG 802.11 Wireless cards
  281. - URL:=http://wireless.kernel.org/en/users/Drivers/mwl8k
  282. + URL:=https://wireless.wiki.kernel.org/en/users/drivers/mwl8k
  283. DEPENDS+= @PCI_SUPPORT +kmod-mac80211 +@DRIVER_11N_SUPPORT +mwl8k-firmware
  284. FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/marvell/mwl8k.ko
  285. AUTOLOAD:=$(call AutoProbe,mwl8k)
  286. @@ -1056,7 +1056,7 @@ endef
  287. define KernelPackage/mwifiex-pcie
  288. $(call KernelPackage/mac80211/Default)
  289. TITLE:=Driver for Marvell 802.11n/802.11ac PCIe Wireless cards
  290. - URL:=http://wireless.kernel.org/en/users/Drivers/mwifiex
  291. + URL:=https://wireless.wiki.kernel.org/en/users/drivers/mwifiex
  292. DEPENDS+= @PCI_SUPPORT +kmod-mac80211 +@DRIVER_11N_SUPPORT +@DRIVER_11AC_SUPPORT +mwifiex-pcie-firmware
  293. FILES:= \
  294. $(PKG_BUILD_DIR)/drivers/net/wireless/marvell/mwifiex/mwifiex.ko \
  295. @@ -1071,7 +1071,7 @@ endef
  296. define KernelPackage/mwifiex-sdio
  297. $(call KernelPackage/mac80211/Default)
  298. TITLE:=Driver for Marvell 802.11n/802.11ac SDIO Wireless cards
  299. - URL:=http://wireless.kernel.org/en/users/Drivers/mwifiex
  300. + URL:=https://wireless.wiki.kernel.org/en/users/drivers/mwifiex
  301. DEPENDS+= +kmod-mmc +kmod-mac80211 +@DRIVER_11N_SUPPORT +@DRIVER_11AC_SUPPORT +mwifiex-sdio-firmware
  302. FILES:= \
  303. $(PKG_BUILD_DIR)/drivers/net/wireless/marvell/mwifiex/mwifiex.ko \
  304. @@ -1268,7 +1268,7 @@ endef
  305. define KernelPackage/rtl818x/Default
  306. $(call KernelPackage/mac80211/Default)
  307. TITLE:=Realtek Drivers for RTL818x devices
  308. - URL:=http://wireless.kernel.org/en/users/Drivers/rtl8187
  309. + URL:=https://wireless.wiki.kernel.org/en/users/drivers/rtl8187
  310. DEPENDS+= +kmod-eeprom-93cx6 +kmod-mac80211
  311. endef
  312. @@ -1314,6 +1314,15 @@ define KernelPackage/rtlwifi-pci
  313. HIDDEN:=1
  314. endef
  315. +define KernelPackage/rtlwifi-btcoexist
  316. + $(call KernelPackage/mac80211/Default)
  317. + TITLE:=Realtek BT coexist support
  318. + DEPENDS+= +kmod-rtlwifi
  319. + FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/realtek/rtlwifi/btcoexist/btcoexist.ko
  320. + AUTOLOAD:=$(call AutoProbe,btcoexist)
  321. + HIDDEN:=1
  322. +endef
  323. +
  324. define KernelPackage/rtlwifi-usb
  325. $(call KernelPackage/mac80211/Default)
  326. TITLE:=Realtek common driver part (USB support)
  327. @@ -1363,6 +1372,13 @@ define KernelPackage/rtl8192cu
  328. AUTOLOAD:=$(call AutoProbe,rtl8192cu)
  329. endef
  330. +define KernelPackage/rtl8821ae
  331. + $(call KernelPackage/mac80211/Default)
  332. + TITLE:=Realtek RTL8821AE support
  333. + DEPENDS+= +kmod-rtlwifi-btcoexist +kmod-rtlwifi-pci +rtl8821ae-firmware
  334. + FILES:= $(PKG_BUILD_DIR)/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/rtl8821ae.ko
  335. + AUTOLOAD:=$(call AutoProbe,rtl8821ae)
  336. +endef
  337. define KernelPackage/rtl8xxxu
  338. $(call KernelPackage/mac80211/Default)
  339. @@ -1414,7 +1430,7 @@ endef
  340. define KernelPackage/wl12xx
  341. $(call KernelPackage/mac80211/Default)
  342. TITLE:=Driver for TI WL12xx
  343. - URL:=http://wireless.kernel.org/en/users/Drivers/wl12xx
  344. + URL:=https://wireless.wiki.kernel.org/en/users/drivers/wl12xx
  345. DEPENDS+= +kmod-wlcore +wl12xx-firmware
  346. FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/ti/wl12xx/wl12xx.ko
  347. AUTOLOAD:=$(call AutoProbe,wl12xx)
  348. @@ -1427,7 +1443,7 @@ endef
  349. define KernelPackage/wl18xx
  350. $(call KernelPackage/mac80211/Default)
  351. TITLE:=Driver for TI WL18xx
  352. - URL:=http://wireless.kernel.org/en/users/Drivers/wl18xx
  353. + URL:=https://wireless.wiki.kernel.org/en/users/drivers/wl18xx
  354. DEPENDS+= +kmod-wlcore +wl18xx-firmware
  355. FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/ti/wl18xx/wl18xx.ko
  356. AUTOLOAD:=$(call AutoProbe,wl18xx)
  357. @@ -1521,6 +1537,7 @@ config-$(CONFIG_PACKAGE_ATH_DFS) += ATH9K_DFS_CERTIFIED ATH10K_DFS_CERTIFIED
  358. config-$(call config_package,ath9k) += ATH9K
  359. config-$(call config_package,ath9k-common) += ATH9K_COMMON
  360. config-$(CONFIG_TARGET_ar71xx) += ATH9K_AHB
  361. +config-$(CONFIG_TARGET_ipq806x) += ATH10K_AHB
  362. config-$(CONFIG_PCI) += ATH9K_PCI
  363. config-$(CONFIG_ATH_USER_REGD) += ATH_USER_REGD
  364. config-$(CONFIG_ATH9K_SUPPORT_PCOEM) += ATH9K_PCOEM
  365. @@ -1626,12 +1643,14 @@ config-$(call config_package,zd1211rw) += ZD1211RW
  366. config-$(call config_package,rtlwifi) += RTL_CARDS RTLWIFI
  367. config-$(call config_package,rtlwifi-pci) += RTLWIFI_PCI
  368. +config-$(call config_package,rtlwifi-btcoexist) += RTLBTCOEXIST
  369. config-$(call config_package,rtlwifi-usb) += RTLWIFI_USB
  370. config-$(call config_package,rtl8192c-common) += RTL8192C_COMMON
  371. config-$(call config_package,rtl8192ce) += RTL8192CE
  372. config-$(call config_package,rtl8192se) += RTL8192SE
  373. config-$(call config_package,rtl8192de) += RTL8192DE
  374. config-$(call config_package,rtl8192cu) += RTL8192CU
  375. +config-$(call config_package,rtl8821ae) += RTL8821AE
  376. config-$(CONFIG_PACKAGE_RTLWIFI_DEBUG) += RTLWIFI_DEBUG
  377. config-$(call config_package,rtl8xxxu) += RTL8XXXU
  378. @@ -1640,8 +1659,7 @@ config-y += RTL8XXXU_UNTESTED
  379. config-$(CONFIG_LEDS_TRIGGERS) += MAC80211_LEDS B43_LEDS B43LEGACY_LEDS
  380. MAKE_OPTS:= -C "$(PKG_BUILD_DIR)" \
  381. - CROSS_COMPILE="$(KERNEL_CROSS)" \
  382. - ARCH="$(LINUX_KARCH)" \
  383. + $(KERNEL_MAKE_FLAGS) \
  384. EXTRA_CFLAGS="-I$(PKG_BUILD_DIR)/include $(IREMAP_CFLAGS)" \
  385. KLIB_BUILD="$(LINUX_DIR)" \
  386. MODPROBE=true \
  387. @@ -1649,10 +1667,6 @@ MAKE_OPTS:= -C "$(PKG_BUILD_DIR)" \
  388. KERNEL_SUBLEVEL=$(lastword $(subst ., ,$(KERNEL_PATCHVER))) \
  389. KBUILD_LDFLAGS_MODULE_PREREQ=
  390. -ifneq ($(findstring c,$(OPENWRT_VERBOSE)),)
  391. - MAKE_OPTS += V=1
  392. -endif
  393. -
  394. define ConfigVars
  395. $(subst $(space),,$(foreach opt,$(config-$(1)),CPTCFG_$(opt)=$(1)
  396. ))
  397. @@ -1834,12 +1848,14 @@ $(eval $(call KernelPackage,rtl8180))
  398. $(eval $(call KernelPackage,rtl8187))
  399. $(eval $(call KernelPackage,rtlwifi))
  400. $(eval $(call KernelPackage,rtlwifi-pci))
  401. +$(eval $(call KernelPackage,rtlwifi-btcoexist))
  402. $(eval $(call KernelPackage,rtlwifi-usb))
  403. $(eval $(call KernelPackage,rtl8192c-common))
  404. $(eval $(call KernelPackage,rtl8192ce))
  405. $(eval $(call KernelPackage,rtl8192se))
  406. $(eval $(call KernelPackage,rtl8192de))
  407. $(eval $(call KernelPackage,rtl8192cu))
  408. +$(eval $(call KernelPackage,rtl8821ae))
  409. $(eval $(call KernelPackage,rtl8xxxu))
  410. $(eval $(call KernelPackage,wlcore))
  411. $(eval $(call KernelPackage,wl12xx))
  412. diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
  413. index 82c374353ec98259e57c2568843ca9ef6b3a4ca2..ebd24df0d3e984bf2afc5997207509f8150509b2 100644
  414. --- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
  415. +++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
  416. @@ -411,6 +411,34 @@ mac80211_check_ap() {
  417. has_ap=1
  418. }
  419. +mac80211_iw_interface_add() {
  420. + local phy="$1"
  421. + local ifname="$2"
  422. + local type="$3"
  423. + local wdsflag="$4"
  424. + local rc
  425. +
  426. + iw phy "$phy" interface add "$ifname" type "$type" $wdsflag
  427. + rc="$?"
  428. +
  429. + [ "$rc" = 233 ] && {
  430. + # Device might have just been deleted, give the kernel some time to finish cleaning it up
  431. + sleep 1
  432. +
  433. + iw phy "$phy" interface add "$ifname" type "$type" $wdsflag
  434. + rc="$?"
  435. + }
  436. +
  437. + [ "$rc" = 233 ] && {
  438. + # Device might not support virtual interfaces, so the interface never got deleted in the first place.
  439. + # Check if the interface already exists, and avoid failing in this case.
  440. + ip link show dev "$ifname" >/dev/null 2>/dev/null && rc=0
  441. + }
  442. +
  443. + [ "$rc" != 0 ] && wireless_setup_failed INTERFACE_CREATION_FAILED
  444. + return $rc
  445. +}
  446. +
  447. mac80211_prepare_vif() {
  448. json_select config
  449. @@ -437,7 +465,7 @@ mac80211_prepare_vif() {
  450. # It is far easier to delete and create the desired interface
  451. case "$mode" in
  452. adhoc)
  453. - iw phy "$phy" interface add "$ifname" type adhoc
  454. + mac80211_iw_interface_add "$phy" "$ifname" adhoc || return
  455. ;;
  456. ap)
  457. # Hostapd will handle recreating the interface and
  458. @@ -451,21 +479,21 @@ mac80211_prepare_vif() {
  459. mac80211_hostapd_setup_bss "$phy" "$ifname" "$macaddr" "$type" || return
  460. [ -n "$hostapd_ctrl" ] || {
  461. - iw phy "$phy" interface add "$ifname" type __ap
  462. + mac80211_iw_interface_add "$phy" "$ifname" __ap || return
  463. hostapd_ctrl="${hostapd_ctrl:-/var/run/hostapd/$ifname}"
  464. }
  465. ;;
  466. mesh)
  467. - iw phy "$phy" interface add "$ifname" type mp
  468. + mac80211_iw_interface_add "$phy" "$ifname" mp || return
  469. ;;
  470. monitor)
  471. - iw phy "$phy" interface add "$ifname" type monitor
  472. + mac80211_iw_interface_add "$phy" "$ifname" monitor || return
  473. ;;
  474. sta)
  475. local wdsflag=
  476. staidx="$(($staidx + 1))"
  477. [ "$wds" -gt 0 ] && wdsflag="4addr on"
  478. - iw phy "$phy" interface add "$ifname" type managed $wdsflag
  479. + mac80211_iw_interface_add "$phy" "$ifname" managed "$wdsflag" || return
  480. [ "$powersave" -gt 0 ] && powersave="on" || powersave="off"
  481. iw "$ifname" set power_save "$powersave"
  482. ;;
  483. diff --git a/package/kernel/mac80211/files/regdb.txt b/package/kernel/mac80211/files/regdb.txt
  484. index c4a9b2d15fd56c7331726cfb10e15c7acc673e8c..d583887602d2e3b337a9f878ef0aa7e58b36d8c2 100644
  485. --- a/package/kernel/mac80211/files/regdb.txt
  486. +++ b/package/kernel/mac80211/files/regdb.txt
  487. @@ -85,12 +85,20 @@ country AT: DFS-ETSI
  488. # 60 GHz band channels 1-4, ref: Etsi En 302 567
  489. (57000 - 66000 @ 2160), (40)
  490. +# Source:
  491. +# https://www.legislation.gov.au/Details/F2016C00432
  492. +# Both DFS-ETSI and DFS-FCC are acceptable per AS/NZS 4268 Appendix B.
  493. +# The EIRP for DFS bands can be increased by 3dB if TPC is implemented.
  494. +# In order to allow 80MHz operation between 5650-5730MHz the upper boundary
  495. +# of this more restrictive band has been shifted up by 5MHz from 5725MHz.
  496. country AU: DFS-ETSI
  497. - (2402 - 2482 @ 40), (20)
  498. - (5170 - 5250 @ 80), (17), AUTO-BW
  499. - (5250 - 5330 @ 80), (24), DFS, AUTO-BW
  500. - (5490 - 5710 @ 160), (24), DFS
  501. - (5735 - 5835 @ 80), (30)
  502. + (2400 - 2483.5 @ 40), (36)
  503. + (5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW
  504. + (5250 - 5350 @ 80), (20), NO-OUTDOOR, AUTO-BW, DFS
  505. + (5470 - 5600 @ 80), (27), DFS
  506. + (5650 - 5730 @ 80), (27), DFS
  507. + (5730 - 5850 @ 80), (36)
  508. + (57000 - 66000 @ 2160), (43), NO-OUTDOOR
  509. country AW: DFS-ETSI
  510. (2402 - 2482 @ 40), (20)
  511. @@ -230,9 +238,9 @@ country BZ: DFS-JP
  512. country CA: DFS-FCC
  513. (2402 - 2472 @ 40), (30)
  514. - (5170 - 5250 @ 80), (17), AUTO-BW
  515. - (5250 - 5330 @ 80), (24), DFS, AUTO-BW
  516. - (5490 - 5600 @ 80), (24), DFS
  517. + (5150 - 5250 @ 80), (23), AUTO-BW
  518. + (5250 - 5350 @ 80), (24), DFS, AUTO-BW
  519. + (5470 - 5600 @ 80), (24), DFS
  520. (5650 - 5730 @ 80), (24), DFS
  521. (5735 - 5835 @ 80), (30)
  522. @@ -580,11 +588,10 @@ country IL: DFS-ETSI
  523. (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW
  524. (5250 - 5350 @ 80), (200 mW), NO-OUTDOOR, DFS, AUTO-BW
  525. -country IN: DFS-JP
  526. +country IN:
  527. (2402 - 2482 @ 40), (20)
  528. - (5170 - 5250 @ 80), (20), AUTO-BW
  529. - (5250 - 5330 @ 80), (20), DFS, AUTO-BW
  530. - (5735 - 5835 @ 80), (20)
  531. + (5150 - 5350 @ 160), (23)
  532. + (5725 - 5875 @ 80), (23)
  533. country IR: DFS-JP
  534. (2402 - 2482 @ 40), (20)
  535. diff --git a/package/kernel/mac80211/patches/012-kernel_build_check.patch b/package/kernel/mac80211/patches/012-kernel_build_check.patch
  536. new file mode 100644
  537. index 0000000000000000000000000000000000000000..d225ba1820b911003c267809b07c565e5e42d034
  538. --- /dev/null
  539. +++ b/package/kernel/mac80211/patches/012-kernel_build_check.patch
  540. @@ -0,0 +1,11 @@
  541. +--- a/Makefile
  542. ++++ b/Makefile
  543. +@@ -2,7 +2,7 @@
  544. + # Makefile for the output source package
  545. + #
  546. +
  547. +-ifeq ($(KERNELRELEASE),)
  548. ++ifeq ($(KERNELVERSION),)
  549. +
  550. + MAKEFLAGS += --no-print-directory
  551. + SHELL := /usr/bin/env bash
  552. diff --git a/package/kernel/mac80211/patches/020-01-rt2x00-avoid-introducing-a-USB-dependency-in-the-rt2.patch b/package/kernel/mac80211/patches/020-01-rt2x00-avoid-introducing-a-USB-dependency-in-the-rt2.patch
  553. index 7e829faef60b721a04da969a31deb5c7b6a00990..cf551fde023a8e1ae9e4379db59616559e0ae2dc 100644
  554. --- a/package/kernel/mac80211/patches/020-01-rt2x00-avoid-introducing-a-USB-dependency-in-the-rt2.patch
  555. +++ b/package/kernel/mac80211/patches/020-01-rt2x00-avoid-introducing-a-USB-dependency-in-the-rt2.patch
  556. @@ -23,11 +23,9 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  557. drivers/net/wireless/ralink/rt2x00/rt2x00usb.c | 5 +++++
  558. 2 files changed, 13 insertions(+), 15 deletions(-)
  559. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
  560. -index 8fcbc8dc94c1..4b08007f93f7 100644
  561. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
  562. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
  563. -@@ -1436,21 +1436,6 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev)
  564. +@@ -1436,21 +1436,6 @@ void rt2x00lib_remove_dev(struct rt2x00_
  565. cancel_work_sync(&rt2x00dev->intf_work);
  566. cancel_delayed_work_sync(&rt2x00dev->autowakeup_work);
  567. cancel_work_sync(&rt2x00dev->sleep_work);
  568. @@ -49,7 +47,7 @@ index 8fcbc8dc94c1..4b08007f93f7 100644
  569. /*
  570. * Kill the tx status tasklet.
  571. -@@ -1466,6 +1451,14 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev)
  572. +@@ -1466,6 +1451,14 @@ void rt2x00lib_remove_dev(struct rt2x00_
  573. */
  574. rt2x00lib_uninitialize(rt2x00dev);
  575. @@ -64,11 +62,9 @@ index 8fcbc8dc94c1..4b08007f93f7 100644
  576. /*
  577. * Free extra components
  578. */
  579. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
  580. -index 838ca58d2dd6..5a2bf9f63cd7 100644
  581. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
  582. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
  583. -@@ -744,6 +744,11 @@ void rt2x00usb_uninitialize(struct rt2x00_dev *rt2x00dev)
  584. +@@ -744,6 +744,11 @@ void rt2x00usb_uninitialize(struct rt2x0
  585. {
  586. struct data_queue *queue;
  587. @@ -80,6 +76,3 @@ index 838ca58d2dd6..5a2bf9f63cd7 100644
  588. queue_for_each(rt2x00dev, queue)
  589. rt2x00usb_free_entries(queue);
  590. }
  591. ---
  592. -2.12.1
  593. -
  594. diff --git a/package/kernel/mac80211/patches/020-02-rt2x00usb-do-not-anchor-rx-and-tx-urb-s.patch b/package/kernel/mac80211/patches/020-02-rt2x00usb-do-not-anchor-rx-and-tx-urb-s.patch
  595. index 6510b55c7952999db4f15fd3bc095dcc06414928..d096b64a8a18ad2c22c4fb93913fd63975dc3cd0 100644
  596. --- a/package/kernel/mac80211/patches/020-02-rt2x00usb-do-not-anchor-rx-and-tx-urb-s.patch
  597. +++ b/package/kernel/mac80211/patches/020-02-rt2x00usb-do-not-anchor-rx-and-tx-urb-s.patch
  598. @@ -30,11 +30,9 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  599. drivers/net/wireless/ralink/rt2x00/rt2x00usb.c | 4 ----
  600. 1 file changed, 4 deletions(-)
  601. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
  602. -index 5a2bf9f63cd7..fe13dd07cc2a 100644
  603. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
  604. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
  605. -@@ -319,10 +319,8 @@ static bool rt2x00usb_kick_tx_entry(struct queue_entry *entry, void *data)
  606. +@@ -319,10 +319,8 @@ static bool rt2x00usb_kick_tx_entry(stru
  607. entry->skb->data, length,
  608. rt2x00usb_interrupt_txdone, entry);
  609. @@ -45,7 +43,7 @@ index 5a2bf9f63cd7..fe13dd07cc2a 100644
  610. if (status == -ENODEV)
  611. clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
  612. set_bit(ENTRY_DATA_IO_FAILED, &entry->flags);
  613. -@@ -410,10 +408,8 @@ static bool rt2x00usb_kick_rx_entry(struct queue_entry *entry, void *data)
  614. +@@ -410,10 +408,8 @@ static bool rt2x00usb_kick_rx_entry(stru
  615. entry->skb->data, entry->skb->len,
  616. rt2x00usb_interrupt_rxdone, entry);
  617. @@ -56,6 +54,3 @@ index 5a2bf9f63cd7..fe13dd07cc2a 100644
  618. if (status == -ENODEV)
  619. clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
  620. set_bit(ENTRY_DATA_IO_FAILED, &entry->flags);
  621. ---
  622. -2.12.1
  623. -
  624. diff --git a/package/kernel/mac80211/patches/020-03-rt2x00usb-fix-anchor-initialization.patch b/package/kernel/mac80211/patches/020-03-rt2x00usb-fix-anchor-initialization.patch
  625. index 78d8ac63d8629ee79873c8d0399ed1a1aca8e435..5ff73df2a6f4748ab7eb9074050b03dcc473da2a 100644
  626. --- a/package/kernel/mac80211/patches/020-03-rt2x00usb-fix-anchor-initialization.patch
  627. +++ b/package/kernel/mac80211/patches/020-03-rt2x00usb-fix-anchor-initialization.patch
  628. @@ -36,11 +36,9 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  629. drivers/net/wireless/ralink/rt2x00/rt2x00usb.c | 13 ++++++++-----
  630. 1 file changed, 8 insertions(+), 5 deletions(-)
  631. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
  632. -index fe13dd07cc2a..c696f0ad6a68 100644
  633. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
  634. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
  635. -@@ -825,10 +825,6 @@ int rt2x00usb_probe(struct usb_interface *usb_intf,
  636. +@@ -825,10 +825,6 @@ int rt2x00usb_probe(struct usb_interface
  637. if (retval)
  638. goto exit_free_device;
  639. @@ -51,7 +49,7 @@ index fe13dd07cc2a..c696f0ad6a68 100644
  640. rt2x00dev->anchor = devm_kmalloc(&usb_dev->dev,
  641. sizeof(struct usb_anchor),
  642. GFP_KERNEL);
  643. -@@ -836,10 +832,17 @@ int rt2x00usb_probe(struct usb_interface *usb_intf,
  644. +@@ -836,10 +832,17 @@ int rt2x00usb_probe(struct usb_interface
  645. retval = -ENOMEM;
  646. goto exit_free_reg;
  647. }
  648. @@ -70,6 +68,3 @@ index fe13dd07cc2a..c696f0ad6a68 100644
  649. exit_free_reg:
  650. rt2x00usb_free_reg(rt2x00dev);
  651. ---
  652. -2.12.1
  653. -
  654. diff --git a/package/kernel/mac80211/patches/020-04-rt61pci-use-entry-directly.patch b/package/kernel/mac80211/patches/020-04-rt61pci-use-entry-directly.patch
  655. index d8f262af850ef85ce74be1d1a4b0bceb67928f66..274d8f7c3f819f2908778561cfa1acbcab7531d1 100644
  656. --- a/package/kernel/mac80211/patches/020-04-rt61pci-use-entry-directly.patch
  657. +++ b/package/kernel/mac80211/patches/020-04-rt61pci-use-entry-directly.patch
  658. @@ -9,11 +9,9 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  659. drivers/net/wireless/ralink/rt2x00/rt61pci.c | 3 +--
  660. 1 file changed, 1 insertion(+), 2 deletions(-)
  661. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt61pci.c b/drivers/net/wireless/ralink/rt2x00/rt61pci.c
  662. -index 5306a3b2622d..8adb5f3abe15 100644
  663. --- a/drivers/net/wireless/ralink/rt2x00/rt61pci.c
  664. +++ b/drivers/net/wireless/ralink/rt2x00/rt61pci.c
  665. -@@ -1903,8 +1903,7 @@ static void rt61pci_write_tx_desc(struct queue_entry *entry,
  666. +@@ -1903,8 +1903,7 @@ static void rt61pci_write_tx_desc(struct
  667. rt2x00_desc_read(txd, 5, &word);
  668. rt2x00_set_field32(&word, TXD_W5_PID_TYPE, entry->queue->qid);
  669. @@ -23,6 +21,3 @@ index 5306a3b2622d..8adb5f3abe15 100644
  670. rt2x00_set_field32(&word, TXD_W5_TX_POWER,
  671. TXPOWER_TO_DEV(entry->queue->rt2x00dev->tx_power));
  672. rt2x00_set_field32(&word, TXD_W5_WAITING_DMA_DONE_INT, 1);
  673. ---
  674. -2.12.1
  675. -
  676. diff --git a/package/kernel/mac80211/patches/020-05-rt2x00-call-entry-directly-in-rt2x00_dump_frame.patch b/package/kernel/mac80211/patches/020-05-rt2x00-call-entry-directly-in-rt2x00_dump_frame.patch
  677. index 04a5118103f219c9b4d737c27cfc80f8ee121e2a..241c1127bcd3a9162b7c4b466e54266a8d43dbe4 100644
  678. --- a/package/kernel/mac80211/patches/020-05-rt2x00-call-entry-directly-in-rt2x00_dump_frame.patch
  679. +++ b/package/kernel/mac80211/patches/020-05-rt2x00-call-entry-directly-in-rt2x00_dump_frame.patch
  680. @@ -18,11 +18,9 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  681. drivers/net/wireless/ralink/rt2x00/rt73usb.c | 2 +-
  682. 10 files changed, 15 insertions(+), 14 deletions(-)
  683. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2400pci.c b/drivers/net/wireless/ralink/rt2x00/rt2400pci.c
  684. -index 085c5b423bdf..19874439ac40 100644
  685. --- a/drivers/net/wireless/ralink/rt2x00/rt2400pci.c
  686. +++ b/drivers/net/wireless/ralink/rt2x00/rt2400pci.c
  687. -@@ -1200,7 +1200,7 @@ static void rt2400pci_write_beacon(struct queue_entry *entry,
  688. +@@ -1200,7 +1200,7 @@ static void rt2400pci_write_beacon(struc
  689. /*
  690. * Dump beacon to userspace through debugfs.
  691. */
  692. @@ -31,11 +29,9 @@ index 085c5b423bdf..19874439ac40 100644
  693. out:
  694. /*
  695. * Enable beaconing again.
  696. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2500pci.c b/drivers/net/wireless/ralink/rt2x00/rt2500pci.c
  697. -index 9832fd50c793..791434de8052 100644
  698. --- a/drivers/net/wireless/ralink/rt2x00/rt2500pci.c
  699. +++ b/drivers/net/wireless/ralink/rt2x00/rt2500pci.c
  700. -@@ -1349,7 +1349,7 @@ static void rt2500pci_write_beacon(struct queue_entry *entry,
  701. +@@ -1349,7 +1349,7 @@ static void rt2500pci_write_beacon(struc
  702. /*
  703. * Dump beacon to userspace through debugfs.
  704. */
  705. @@ -44,11 +40,9 @@ index 9832fd50c793..791434de8052 100644
  706. out:
  707. /*
  708. * Enable beaconing again.
  709. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2500usb.c b/drivers/net/wireless/ralink/rt2x00/rt2500usb.c
  710. -index cd3ab5a9e98d..62357465fe29 100644
  711. --- a/drivers/net/wireless/ralink/rt2x00/rt2500usb.c
  712. +++ b/drivers/net/wireless/ralink/rt2x00/rt2500usb.c
  713. -@@ -1170,7 +1170,7 @@ static void rt2500usb_write_beacon(struct queue_entry *entry,
  714. +@@ -1170,7 +1170,7 @@ static void rt2500usb_write_beacon(struc
  715. /*
  716. * Dump beacon to userspace through debugfs.
  717. */
  718. @@ -57,11 +51,9 @@ index cd3ab5a9e98d..62357465fe29 100644
  719. /*
  720. * USB devices cannot blindly pass the skb->len as the
  721. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  722. -index 572cdea4ca25..8223a1520316 100644
  723. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  724. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  725. -@@ -1014,7 +1014,7 @@ void rt2800_write_beacon(struct queue_entry *entry, struct txentry_desc *txdesc)
  726. +@@ -1014,7 +1014,7 @@ void rt2800_write_beacon(struct queue_en
  727. /*
  728. * Dump beacon to userspace through debugfs.
  729. */
  730. @@ -70,11 +62,9 @@ index 572cdea4ca25..8223a1520316 100644
  731. /*
  732. * Write entire beacon with TXWI and padding to register.
  733. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00.h b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
  734. -index ea299c4e7ada..26869b3bef45 100644
  735. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
  736. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
  737. -@@ -1400,11 +1400,11 @@ void rt2x00queue_flush_queues(struct rt2x00_dev *rt2x00dev, bool drop);
  738. +@@ -1400,11 +1400,11 @@ void rt2x00queue_flush_queues(struct rt2
  739. */
  740. #ifdef CPTCFG_RT2X00_LIB_DEBUGFS
  741. void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev,
  742. @@ -88,11 +78,9 @@ index ea299c4e7ada..26869b3bef45 100644
  743. {
  744. }
  745. #endif /* CPTCFG_RT2X00_LIB_DEBUGFS */
  746. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00debug.c b/drivers/net/wireless/ralink/rt2x00/rt2x00debug.c
  747. -index 72ae530e4a3b..964aefdc11f0 100644
  748. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00debug.c
  749. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00debug.c
  750. -@@ -157,9 +157,10 @@ void rt2x00debug_update_crypto(struct rt2x00_dev *rt2x00dev,
  751. +@@ -157,9 +157,10 @@ void rt2x00debug_update_crypto(struct rt
  752. }
  753. void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev,
  754. @@ -104,7 +92,7 @@ index 72ae530e4a3b..964aefdc11f0 100644
  755. struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb);
  756. struct sk_buff *skbcopy;
  757. struct rt2x00dump_hdr *dump_hdr;
  758. -@@ -196,8 +197,8 @@ void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev,
  759. +@@ -196,8 +197,8 @@ void rt2x00debug_dump_frame(struct rt2x0
  760. dump_hdr->chip_rf = cpu_to_le16(rt2x00dev->chip.rf);
  761. dump_hdr->chip_rev = cpu_to_le16(rt2x00dev->chip.rev);
  762. dump_hdr->type = cpu_to_le16(type);
  763. @@ -115,11 +103,9 @@ index 72ae530e4a3b..964aefdc11f0 100644
  764. dump_hdr->timestamp_sec = cpu_to_le32(timestamp.tv_sec);
  765. dump_hdr->timestamp_usec = cpu_to_le32(timestamp.tv_usec);
  766. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
  767. -index 4b08007f93f7..dd6678109b7e 100644
  768. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
  769. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
  770. -@@ -363,7 +363,7 @@ void rt2x00lib_txdone(struct queue_entry *entry,
  771. +@@ -363,7 +363,7 @@ void rt2x00lib_txdone(struct queue_entry
  772. * Send frame to debugfs immediately, after this call is completed
  773. * we are going to overwrite the skb->cb array.
  774. */
  775. @@ -128,7 +114,7 @@ index 4b08007f93f7..dd6678109b7e 100644
  776. /*
  777. * Determine if the frame has been successfully transmitted and
  778. -@@ -772,7 +772,7 @@ void rt2x00lib_rxdone(struct queue_entry *entry, gfp_t gfp)
  779. +@@ -772,7 +772,7 @@ void rt2x00lib_rxdone(struct queue_entry
  780. */
  781. rt2x00link_update_stats(rt2x00dev, entry->skb, &rxdesc);
  782. rt2x00debug_update_crypto(rt2x00dev, &rxdesc);
  783. @@ -137,11 +123,9 @@ index 4b08007f93f7..dd6678109b7e 100644
  784. /*
  785. * Initialize RX status information, and send frame
  786. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
  787. -index b2364d378774..380daf4e1b8d 100644
  788. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
  789. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
  790. -@@ -544,7 +544,7 @@ static void rt2x00queue_write_tx_descriptor(struct queue_entry *entry,
  791. +@@ -544,7 +544,7 @@ static void rt2x00queue_write_tx_descrip
  792. * All processing on the frame has been completed, this means
  793. * it is now ready to be dumped to userspace through debugfs.
  794. */
  795. @@ -150,11 +134,9 @@ index b2364d378774..380daf4e1b8d 100644
  796. }
  797. static void rt2x00queue_kick_tx_queue(struct data_queue *queue,
  798. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt61pci.c b/drivers/net/wireless/ralink/rt2x00/rt61pci.c
  799. -index 8adb5f3abe15..973d418b8113 100644
  800. --- a/drivers/net/wireless/ralink/rt2x00/rt61pci.c
  801. +++ b/drivers/net/wireless/ralink/rt2x00/rt61pci.c
  802. -@@ -1988,7 +1988,7 @@ static void rt61pci_write_beacon(struct queue_entry *entry,
  803. +@@ -1988,7 +1988,7 @@ static void rt61pci_write_beacon(struct
  804. /*
  805. * Dump beacon to userspace through debugfs.
  806. */
  807. @@ -163,11 +145,9 @@ index 8adb5f3abe15..973d418b8113 100644
  808. /*
  809. * Write entire beacon with descriptor and padding to register.
  810. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt73usb.c b/drivers/net/wireless/ralink/rt2x00/rt73usb.c
  811. -index 1a29c4d205a5..bb8d307a789f 100644
  812. --- a/drivers/net/wireless/ralink/rt2x00/rt73usb.c
  813. +++ b/drivers/net/wireless/ralink/rt2x00/rt73usb.c
  814. -@@ -1557,7 +1557,7 @@ static void rt73usb_write_beacon(struct queue_entry *entry,
  815. +@@ -1557,7 +1557,7 @@ static void rt73usb_write_beacon(struct
  816. /*
  817. * Dump beacon to userspace through debugfs.
  818. */
  819. @@ -176,6 +156,3 @@ index 1a29c4d205a5..bb8d307a789f 100644
  820. /*
  821. * Write entire beacon with descriptor and padding to register.
  822. ---
  823. -2.12.1
  824. -
  825. diff --git a/package/kernel/mac80211/patches/020-06-rt2x00-remove-queue_entry-from-skbdesc.patch b/package/kernel/mac80211/patches/020-06-rt2x00-remove-queue_entry-from-skbdesc.patch
  826. index d8194acd2345a3d0536a0742fe84cddb5b4832fe..c2ef9c1bb0dda0fd116ab66ffb89783b3a433114 100644
  827. --- a/package/kernel/mac80211/patches/020-06-rt2x00-remove-queue_entry-from-skbdesc.patch
  828. +++ b/package/kernel/mac80211/patches/020-06-rt2x00-remove-queue_entry-from-skbdesc.patch
  829. @@ -13,11 +13,9 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  830. drivers/net/wireless/ralink/rt2x00/rt2x00queue.h | 2 --
  831. 2 files changed, 5 deletions(-)
  832. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
  833. -index 380daf4e1b8d..e1660b92b20c 100644
  834. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
  835. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
  836. -@@ -83,7 +83,6 @@ struct sk_buff *rt2x00queue_alloc_rxskb(struct queue_entry *entry, gfp_t gfp)
  837. +@@ -83,7 +83,6 @@ struct sk_buff *rt2x00queue_alloc_rxskb(
  838. */
  839. skbdesc = get_skb_frame_desc(skb);
  840. memset(skbdesc, 0, sizeof(*skbdesc));
  841. @@ -25,7 +23,7 @@ index 380daf4e1b8d..e1660b92b20c 100644
  842. if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_DMA)) {
  843. dma_addr_t skb_dma;
  844. -@@ -689,7 +688,6 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb,
  845. +@@ -689,7 +688,6 @@ int rt2x00queue_write_tx_frame(struct da
  846. goto out;
  847. }
  848. @@ -33,7 +31,7 @@ index 380daf4e1b8d..e1660b92b20c 100644
  849. entry->skb = skb;
  850. /*
  851. -@@ -774,7 +772,6 @@ int rt2x00queue_update_beacon(struct rt2x00_dev *rt2x00dev,
  852. +@@ -774,7 +772,6 @@ int rt2x00queue_update_beacon(struct rt2
  853. */
  854. skbdesc = get_skb_frame_desc(intf->beacon->skb);
  855. memset(skbdesc, 0, sizeof(*skbdesc));
  856. @@ -41,8 +39,6 @@ index 380daf4e1b8d..e1660b92b20c 100644
  857. /*
  858. * Send beacon to hardware.
  859. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
  860. -index 2233b911a1d7..22d18818e850 100644
  861. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
  862. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
  863. @@ -116,8 +116,6 @@ struct skb_frame_desc {
  864. @@ -54,6 +50,3 @@ index 2233b911a1d7..22d18818e850 100644
  865. };
  866. /**
  867. ---
  868. -2.12.1
  869. -
  870. diff --git a/package/kernel/mac80211/patches/020-07-rt2500usb-don-t-mark-register-accesses-as-inline.patch b/package/kernel/mac80211/patches/020-07-rt2500usb-don-t-mark-register-accesses-as-inline.patch
  871. index a82886d234cd2ee8807a80bbd0cf071e4b9cd982..65496ca467a30c6a5f5633f7dce804ca6d2214c9 100644
  872. --- a/package/kernel/mac80211/patches/020-07-rt2500usb-don-t-mark-register-accesses-as-inline.patch
  873. +++ b/package/kernel/mac80211/patches/020-07-rt2500usb-don-t-mark-register-accesses-as-inline.patch
  874. @@ -21,11 +21,9 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  875. drivers/net/wireless/ralink/rt2x00/rt2500usb.c | 19 +++++--------------
  876. 1 file changed, 5 insertions(+), 14 deletions(-)
  877. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2500usb.c b/drivers/net/wireless/ralink/rt2x00/rt2500usb.c
  878. -index 62357465fe29..0d2670a56c4c 100644
  879. --- a/drivers/net/wireless/ralink/rt2x00/rt2500usb.c
  880. +++ b/drivers/net/wireless/ralink/rt2x00/rt2500usb.c
  881. -@@ -55,7 +55,7 @@ MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption.");
  882. +@@ -55,7 +55,7 @@ MODULE_PARM_DESC(nohwcrypt, "Disable har
  883. * If the csr_mutex is already held then the _lock variants must
  884. * be used instead.
  885. */
  886. @@ -34,7 +32,7 @@ index 62357465fe29..0d2670a56c4c 100644
  887. const unsigned int offset,
  888. u16 *value)
  889. {
  890. -@@ -66,7 +66,7 @@ static inline void rt2500usb_register_read(struct rt2x00_dev *rt2x00dev,
  891. +@@ -66,7 +66,7 @@ static inline void rt2500usb_register_re
  892. *value = le16_to_cpu(reg);
  893. }
  894. @@ -43,7 +41,7 @@ index 62357465fe29..0d2670a56c4c 100644
  895. const unsigned int offset,
  896. u16 *value)
  897. {
  898. -@@ -77,16 +77,7 @@ static inline void rt2500usb_register_read_lock(struct rt2x00_dev *rt2x00dev,
  899. +@@ -77,16 +77,7 @@ static inline void rt2500usb_register_re
  900. *value = le16_to_cpu(reg);
  901. }
  902. @@ -61,7 +59,7 @@ index 62357465fe29..0d2670a56c4c 100644
  903. const unsigned int offset,
  904. u16 value)
  905. {
  906. -@@ -96,7 +87,7 @@ static inline void rt2500usb_register_write(struct rt2x00_dev *rt2x00dev,
  907. +@@ -96,7 +87,7 @@ static inline void rt2500usb_register_wr
  908. &reg, sizeof(reg));
  909. }
  910. @@ -70,7 +68,7 @@ index 62357465fe29..0d2670a56c4c 100644
  911. const unsigned int offset,
  912. u16 value)
  913. {
  914. -@@ -106,7 +97,7 @@ static inline void rt2500usb_register_write_lock(struct rt2x00_dev *rt2x00dev,
  915. +@@ -106,7 +97,7 @@ static inline void rt2500usb_register_wr
  916. &reg, sizeof(reg), REGISTER_TIMEOUT);
  917. }
  918. @@ -79,6 +77,3 @@ index 62357465fe29..0d2670a56c4c 100644
  919. const unsigned int offset,
  920. void *value, const u16 length)
  921. {
  922. ---
  923. -2.12.1
  924. -
  925. diff --git a/package/kernel/mac80211/patches/020-08-rt2x00-rt2800lib-move-rt2800_drv_data-declaration-in.patch b/package/kernel/mac80211/patches/020-08-rt2x00-rt2800lib-move-rt2800_drv_data-declaration-in.patch
  926. index c2fa92641ad231558b4d9dcadeb59e7d4504ba74..8b61235e112f742304ab0b15d00737183168624c 100644
  927. --- a/package/kernel/mac80211/patches/020-08-rt2x00-rt2800lib-move-rt2800_drv_data-declaration-in.patch
  928. +++ b/package/kernel/mac80211/patches/020-08-rt2x00-rt2800lib-move-rt2800_drv_data-declaration-in.patch
  929. @@ -21,8 +21,6 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  930. drivers/net/wireless/ralink/rt2x00/rt2800lib.h | 23 +++++++++++++++++++++++
  931. 2 files changed, 23 insertions(+), 25 deletions(-)
  932. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800.h b/drivers/net/wireless/ralink/rt2x00/rt2800.h
  933. -index 256496bfbafb..0e7051d8132f 100644
  934. --- a/drivers/net/wireless/ralink/rt2x00/rt2800.h
  935. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800.h
  936. @@ -2987,29 +2987,4 @@ enum rt2800_eeprom_word {
  937. @@ -55,8 +53,6 @@ index 256496bfbafb..0e7051d8132f 100644
  938. -};
  939. -
  940. #endif /* RT2800_H */
  941. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
  942. -index 0a8b4df665fe..8e1ae138c3f1 100644
  943. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
  944. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
  945. @@ -20,6 +20,29 @@
  946. @@ -89,6 +85,3 @@ index 0a8b4df665fe..8e1ae138c3f1 100644
  947. struct rt2800_ops {
  948. void (*register_read)(struct rt2x00_dev *rt2x00dev,
  949. const unsigned int offset, u32 *value);
  950. ---
  951. -2.12.1
  952. -
  953. diff --git a/package/kernel/mac80211/patches/020-09-rt2800-identify-station-based-on-status-WCID.patch b/package/kernel/mac80211/patches/020-09-rt2800-identify-station-based-on-status-WCID.patch
  954. index e6c829cbf8048e28a7910b58f07a064f43d1b9b6..922c35833ced8cd7b6c0b3361facbbff0ff133d8 100644
  955. --- a/package/kernel/mac80211/patches/020-09-rt2800-identify-station-based-on-status-WCID.patch
  956. +++ b/package/kernel/mac80211/patches/020-09-rt2800-identify-station-based-on-status-WCID.patch
  957. @@ -14,8 +14,6 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  958. drivers/net/wireless/ralink/rt2x00/rt2x00queue.h | 3 ++-
  959. 3 files changed, 8 insertions(+), 1 deletion(-)
  960. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  961. -index 8223a1520316..46405cce35e0 100644
  962. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  963. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  964. @@ -855,11 +855,13 @@ EXPORT_SYMBOL_GPL(rt2800_process_rxwi);
  965. @@ -32,7 +30,7 @@ index 8223a1520316..46405cce35e0 100644
  966. /*
  967. * Obtain the status about this packet.
  968. -@@ -872,6 +874,7 @@ void rt2800_txdone_entry(struct queue_entry *entry, u32 status, __le32 *txwi)
  969. +@@ -872,6 +874,7 @@ void rt2800_txdone_entry(struct queue_en
  970. real_mcs = rt2x00_get_field32(status, TX_STA_FIFO_MCS);
  971. aggr = rt2x00_get_field32(status, TX_STA_FIFO_TX_AGGRE);
  972. @@ -40,7 +38,7 @@ index 8223a1520316..46405cce35e0 100644
  973. /*
  974. * If a frame was meant to be sent as a single non-aggregated MPDU
  975. -@@ -1468,6 +1471,7 @@ int rt2800_sta_add(struct rt2x00_dev *rt2x00dev, struct ieee80211_vif *vif,
  976. +@@ -1468,6 +1471,7 @@ int rt2800_sta_add(struct rt2x00_dev *rt
  977. return 0;
  978. __set_bit(wcid - WCID_START, drv_data->sta_ids);
  979. @@ -48,7 +46,7 @@ index 8223a1520316..46405cce35e0 100644
  980. /*
  981. * Clean up WCID attributes and write STA address to the device.
  982. -@@ -1498,6 +1502,7 @@ int rt2800_sta_remove(struct rt2x00_dev *rt2x00dev, struct ieee80211_sta *sta)
  983. +@@ -1498,6 +1502,7 @@ int rt2800_sta_remove(struct rt2x00_dev
  984. * get renewed when the WCID is reused.
  985. */
  986. rt2800_config_wcid(rt2x00dev, NULL, wcid);
  987. @@ -56,8 +54,6 @@ index 8223a1520316..46405cce35e0 100644
  988. __clear_bit(wcid - WCID_START, drv_data->sta_ids);
  989. return 0;
  990. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
  991. -index 8e1ae138c3f1..6811d677a6e7 100644
  992. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
  993. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
  994. @@ -41,6 +41,7 @@ struct rt2800_drv_data {
  995. @@ -68,8 +64,6 @@ index 8e1ae138c3f1..6811d677a6e7 100644
  996. };
  997. struct rt2800_ops {
  998. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
  999. -index 22d18818e850..9b297fce4692 100644
  1000. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
  1001. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
  1002. @@ -102,7 +102,7 @@ enum skb_frame_desc_flags {
  1003. @@ -89,6 +83,3 @@ index 22d18818e850..9b297fce4692 100644
  1004. };
  1005. /**
  1006. ---
  1007. -2.12.1
  1008. -
  1009. diff --git a/package/kernel/mac80211/patches/020-10-rt2x00-separte-filling-tx-status-from-rt2x00lib_txdo.patch b/package/kernel/mac80211/patches/020-10-rt2x00-separte-filling-tx-status-from-rt2x00lib_txdo.patch
  1010. index 278d2d6071a1d4b2bdeea891384692e9e22d45b6..84f2732b2216ac066b08ace5aff5ec515144b09b 100644
  1011. --- a/package/kernel/mac80211/patches/020-10-rt2x00-separte-filling-tx-status-from-rt2x00lib_txdo.patch
  1012. +++ b/package/kernel/mac80211/patches/020-10-rt2x00-separte-filling-tx-status-from-rt2x00lib_txdo.patch
  1013. @@ -12,11 +12,9 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  1014. drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | 141 +++++++++++++------------
  1015. 1 file changed, 76 insertions(+), 65 deletions(-)
  1016. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
  1017. -index dd6678109b7e..b5d90fefc96b 100644
  1018. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
  1019. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
  1020. -@@ -313,73 +313,14 @@ static inline int rt2x00lib_txdone_bar_status(struct queue_entry *entry)
  1021. +@@ -313,73 +313,14 @@ static inline int rt2x00lib_txdone_bar_s
  1022. return ret;
  1023. }
  1024. @@ -96,7 +94,7 @@ index dd6678109b7e..b5d90fefc96b 100644
  1025. rate_idx = skbdesc->tx_rate_idx;
  1026. rate_flags = skbdesc->tx_rate_flags;
  1027. -@@ -448,6 +389,76 @@ void rt2x00lib_txdone(struct queue_entry *entry,
  1028. +@@ -448,6 +389,76 @@ void rt2x00lib_txdone(struct queue_entry
  1029. else
  1030. rt2x00dev->low_level_stats.dot11RTSFailureCount++;
  1031. }
  1032. @@ -173,6 +171,3 @@ index dd6678109b7e..b5d90fefc96b 100644
  1033. /*
  1034. * Only send the status report to mac80211 when it's a frame
  1035. ---
  1036. -2.12.1
  1037. -
  1038. diff --git a/package/kernel/mac80211/patches/020-11-rt2x00-separte-clearing-entry-from-rt2x00lib_txdone.patch b/package/kernel/mac80211/patches/020-11-rt2x00-separte-clearing-entry-from-rt2x00lib_txdone.patch
  1039. index b28d894fc69998b6fcf2b1f8ec9e983a8f35760c..e1359397ba37af5a1561a4a8270dfeaf4e86ffcb 100644
  1040. --- a/package/kernel/mac80211/patches/020-11-rt2x00-separte-clearing-entry-from-rt2x00lib_txdone.patch
  1041. +++ b/package/kernel/mac80211/patches/020-11-rt2x00-separte-clearing-entry-from-rt2x00lib_txdone.patch
  1042. @@ -12,11 +12,9 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  1043. drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | 51 +++++++++++++++-----------
  1044. 1 file changed, 29 insertions(+), 22 deletions(-)
  1045. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
  1046. -index b5d90fefc96b..03b368ac9cb6 100644
  1047. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
  1048. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
  1049. -@@ -391,6 +391,32 @@ static void rt2x00lib_fill_tx_status(struct rt2x00_dev *rt2x00dev,
  1050. +@@ -391,6 +391,32 @@ static void rt2x00lib_fill_tx_status(str
  1051. }
  1052. }
  1053. @@ -49,7 +47,7 @@ index b5d90fefc96b..03b368ac9cb6 100644
  1054. void rt2x00lib_txdone(struct queue_entry *entry,
  1055. struct txdone_entry_desc *txdesc)
  1056. {
  1057. -@@ -471,30 +497,11 @@ void rt2x00lib_txdone(struct queue_entry *entry,
  1058. +@@ -471,30 +497,11 @@ void rt2x00lib_txdone(struct queue_entry
  1059. ieee80211_tx_status(rt2x00dev->hw, entry->skb);
  1060. else
  1061. ieee80211_tx_status_ni(rt2x00dev->hw, entry->skb);
  1062. @@ -83,6 +81,3 @@ index b5d90fefc96b..03b368ac9cb6 100644
  1063. }
  1064. EXPORT_SYMBOL_GPL(rt2x00lib_txdone);
  1065. ---
  1066. -2.12.1
  1067. -
  1068. diff --git a/package/kernel/mac80211/patches/020-12-rt2x00-add-txdone-nomatch-function.patch b/package/kernel/mac80211/patches/020-12-rt2x00-add-txdone-nomatch-function.patch
  1069. index 7bec546a9e62d7647a11560f6c04e0d7c281b094..60edb08e751f5a4daae61c4f515c2c699b67db63 100644
  1070. --- a/package/kernel/mac80211/patches/020-12-rt2x00-add-txdone-nomatch-function.patch
  1071. +++ b/package/kernel/mac80211/patches/020-12-rt2x00-add-txdone-nomatch-function.patch
  1072. @@ -13,11 +13,9 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  1073. drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | 50 ++++++++++++++++++++++++++
  1074. 2 files changed, 52 insertions(+)
  1075. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00.h b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
  1076. -index 340787894c69..91ba10fdf732 100644
  1077. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
  1078. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
  1079. -@@ -1425,6 +1425,8 @@ void rt2x00lib_dmastart(struct queue_entry *entry);
  1080. +@@ -1425,6 +1425,8 @@ void rt2x00lib_dmastart(struct queue_ent
  1081. void rt2x00lib_dmadone(struct queue_entry *entry);
  1082. void rt2x00lib_txdone(struct queue_entry *entry,
  1083. struct txdone_entry_desc *txdesc);
  1084. @@ -26,11 +24,9 @@ index 340787894c69..91ba10fdf732 100644
  1085. void rt2x00lib_txdone_noinfo(struct queue_entry *entry, u32 status);
  1086. void rt2x00lib_rxdone(struct queue_entry *entry, gfp_t gfp);
  1087. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
  1088. -index 03b368ac9cb6..90fc259fb5bc 100644
  1089. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
  1090. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
  1091. -@@ -417,6 +417,56 @@ static void rt2x00lib_clear_entry(struct rt2x00_dev *rt2x00dev,
  1092. +@@ -417,6 +417,56 @@ static void rt2x00lib_clear_entry(struct
  1093. spin_unlock_bh(&entry->queue->tx_lock);
  1094. }
  1095. @@ -87,6 +83,3 @@ index 03b368ac9cb6..90fc259fb5bc 100644
  1096. void rt2x00lib_txdone(struct queue_entry *entry,
  1097. struct txdone_entry_desc *txdesc)
  1098. {
  1099. ---
  1100. -2.12.1
  1101. -
  1102. diff --git a/package/kernel/mac80211/patches/020-13-rt2x00-fixup-fill_tx_status-for-nomatch-case.patch b/package/kernel/mac80211/patches/020-13-rt2x00-fixup-fill_tx_status-for-nomatch-case.patch
  1103. index bb35f2d3005aca4df52f115bacf894a0a8909ce9..a0cc37f491a44e49127f525bbc6f01ab0fe1db5f 100644
  1104. --- a/package/kernel/mac80211/patches/020-13-rt2x00-fixup-fill_tx_status-for-nomatch-case.patch
  1105. +++ b/package/kernel/mac80211/patches/020-13-rt2x00-fixup-fill_tx_status-for-nomatch-case.patch
  1106. @@ -13,11 +13,9 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  1107. drivers/net/wireless/ralink/rt2x00/rt2x00queue.h | 1 +
  1108. 2 files changed, 6 insertions(+), 1 deletion(-)
  1109. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
  1110. -index 90fc259fb5bc..e95d2aad3b3f 100644
  1111. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
  1112. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
  1113. -@@ -357,6 +357,9 @@ static void rt2x00lib_fill_tx_status(struct rt2x00_dev *rt2x00dev,
  1114. +@@ -357,6 +357,9 @@ static void rt2x00lib_fill_tx_status(str
  1115. if (i < (IEEE80211_TX_MAX_RATES - 1))
  1116. tx_info->status.rates[i].idx = -1; /* terminate */
  1117. @@ -27,7 +25,7 @@ index 90fc259fb5bc..e95d2aad3b3f 100644
  1118. if (!(tx_info->flags & IEEE80211_TX_CTL_NO_ACK)) {
  1119. if (success)
  1120. tx_info->flags |= IEEE80211_TX_STAT_ACK;
  1121. -@@ -375,7 +378,8 @@ static void rt2x00lib_fill_tx_status(struct rt2x00_dev *rt2x00dev,
  1122. +@@ -375,7 +378,8 @@ static void rt2x00lib_fill_tx_status(str
  1123. */
  1124. if (test_bit(TXDONE_AMPDU, &txdesc->flags) ||
  1125. tx_info->flags & IEEE80211_TX_CTL_AMPDU) {
  1126. @@ -37,8 +35,6 @@ index 90fc259fb5bc..e95d2aad3b3f 100644
  1127. tx_info->status.ampdu_len = 1;
  1128. tx_info->status.ampdu_ack_len = success ? 1 : 0;
  1129. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
  1130. -index 9b297fce4692..c78fb8c8838a 100644
  1131. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
  1132. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
  1133. @@ -215,6 +215,7 @@ enum txdone_entry_desc_flags {
  1134. @@ -49,6 +45,3 @@ index 9b297fce4692..c78fb8c8838a 100644
  1135. };
  1136. /**
  1137. ---
  1138. -2.12.1
  1139. -
  1140. diff --git a/package/kernel/mac80211/patches/020-14-rt2x00-use-txdone_nomatch-on-rt2800usb.patch b/package/kernel/mac80211/patches/020-14-rt2x00-use-txdone_nomatch-on-rt2800usb.patch
  1141. index f4e4b8b075f5df37429ef36cca0828c72b9592f2..1e23ef7bcbcb5aaed507e0879e25038b3dea6fc5 100644
  1142. --- a/package/kernel/mac80211/patches/020-14-rt2x00-use-txdone_nomatch-on-rt2800usb.patch
  1143. +++ b/package/kernel/mac80211/patches/020-14-rt2x00-use-txdone_nomatch-on-rt2800usb.patch
  1144. @@ -23,11 +23,9 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  1145. drivers/net/wireless/ralink/rt2x00/rt2800usb.c | 18 ++++++--------
  1146. 4 files changed, 35 insertions(+), 19 deletions(-)
  1147. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  1148. -index 46405cce35e0..4a7bec708a13 100644
  1149. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  1150. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  1151. -@@ -852,7 +852,8 @@ void rt2800_process_rxwi(struct queue_entry *entry,
  1152. +@@ -852,7 +852,8 @@ void rt2800_process_rxwi(struct queue_en
  1153. }
  1154. EXPORT_SYMBOL_GPL(rt2800_process_rxwi);
  1155. @@ -37,7 +35,7 @@ index 46405cce35e0..4a7bec708a13 100644
  1156. {
  1157. struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
  1158. struct rt2800_drv_data *drv_data = rt2x00dev->drv_data;
  1159. -@@ -860,8 +861,7 @@ void rt2800_txdone_entry(struct queue_entry *entry, u32 status, __le32 *txwi)
  1160. +@@ -860,8 +861,7 @@ void rt2800_txdone_entry(struct queue_en
  1161. struct txdone_entry_desc txdesc;
  1162. u32 word;
  1163. u16 mcs, real_mcs;
  1164. @@ -47,7 +45,7 @@ index 46405cce35e0..4a7bec708a13 100644
  1165. /*
  1166. * Obtain the status about this packet.
  1167. -@@ -875,6 +875,7 @@ void rt2800_txdone_entry(struct queue_entry *entry, u32 status, __le32 *txwi)
  1168. +@@ -875,6 +875,7 @@ void rt2800_txdone_entry(struct queue_en
  1169. real_mcs = rt2x00_get_field32(status, TX_STA_FIFO_MCS);
  1170. aggr = rt2x00_get_field32(status, TX_STA_FIFO_TX_AGGRE);
  1171. wcid = rt2x00_get_field32(status, TX_STA_FIFO_WCID);
  1172. @@ -55,7 +53,7 @@ index 46405cce35e0..4a7bec708a13 100644
  1173. /*
  1174. * If a frame was meant to be sent as a single non-aggregated MPDU
  1175. -@@ -891,8 +892,12 @@ void rt2800_txdone_entry(struct queue_entry *entry, u32 status, __le32 *txwi)
  1176. +@@ -891,8 +892,12 @@ void rt2800_txdone_entry(struct queue_en
  1177. * Hence, replace the requested rate with the real tx rate to not
  1178. * confuse the rate control algortihm by providing clearly wrong
  1179. * data.
  1180. @@ -70,7 +68,7 @@ index 46405cce35e0..4a7bec708a13 100644
  1181. skbdesc->tx_rate_idx = real_mcs;
  1182. mcs = real_mcs;
  1183. }
  1184. -@@ -900,6 +905,9 @@ void rt2800_txdone_entry(struct queue_entry *entry, u32 status, __le32 *txwi)
  1185. +@@ -900,6 +905,9 @@ void rt2800_txdone_entry(struct queue_en
  1186. if (aggr == 1 || ampdu == 1)
  1187. __set_bit(TXDONE_AMPDU, &txdesc.flags);
  1188. @@ -80,7 +78,7 @@ index 46405cce35e0..4a7bec708a13 100644
  1189. /*
  1190. * Ralink has a retry mechanism using a global fallback
  1191. * table. We setup this fallback table to try the immediate
  1192. -@@ -931,7 +939,18 @@ void rt2800_txdone_entry(struct queue_entry *entry, u32 status, __le32 *txwi)
  1193. +@@ -931,7 +939,18 @@ void rt2800_txdone_entry(struct queue_en
  1194. if (txdesc.retry)
  1195. __set_bit(TXDONE_FALLBACK, &txdesc.flags);
  1196. @@ -100,11 +98,9 @@ index 46405cce35e0..4a7bec708a13 100644
  1197. }
  1198. EXPORT_SYMBOL_GPL(rt2800_txdone_entry);
  1199. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
  1200. -index 6811d677a6e7..d9ef260d542a 100644
  1201. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
  1202. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
  1203. -@@ -191,7 +191,8 @@ void rt2800_write_tx_data(struct queue_entry *entry,
  1204. +@@ -191,7 +191,8 @@ void rt2800_write_tx_data(struct queue_e
  1205. struct txentry_desc *txdesc);
  1206. void rt2800_process_rxwi(struct queue_entry *entry, struct rxdone_entry_desc *txdesc);
  1207. @@ -114,11 +110,9 @@ index 6811d677a6e7..d9ef260d542a 100644
  1208. void rt2800_write_beacon(struct queue_entry *entry, struct txentry_desc *txdesc);
  1209. void rt2800_clear_beacon(struct queue_entry *entry);
  1210. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c b/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
  1211. -index de4790b41be7..3ab3b5323897 100644
  1212. --- a/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
  1213. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
  1214. -@@ -239,7 +239,7 @@ static bool rt2800mmio_txdone_release_entries(struct queue_entry *entry,
  1215. +@@ -239,7 +239,7 @@ static bool rt2800mmio_txdone_release_en
  1216. {
  1217. if (test_bit(ENTRY_DATA_STATUS_SET, &entry->flags)) {
  1218. rt2800_txdone_entry(entry, entry->status,
  1219. @@ -127,11 +121,9 @@ index de4790b41be7..3ab3b5323897 100644
  1220. return false;
  1221. }
  1222. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800usb.c b/drivers/net/wireless/ralink/rt2x00/rt2800usb.c
  1223. -index 205a7b8ac8a7..f11e3f532a84 100644
  1224. --- a/drivers/net/wireless/ralink/rt2x00/rt2800usb.c
  1225. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800usb.c
  1226. -@@ -501,8 +501,7 @@ static int rt2800usb_get_tx_data_len(struct queue_entry *entry)
  1227. +@@ -501,8 +501,7 @@ static int rt2800usb_get_tx_data_len(str
  1228. /*
  1229. * TX control handlers
  1230. */
  1231. @@ -141,7 +133,7 @@ index 205a7b8ac8a7..f11e3f532a84 100644
  1232. {
  1233. __le32 *txwi;
  1234. u32 word;
  1235. -@@ -515,7 +514,7 @@ rt2800usb_txdone_entry_check(struct queue_entry *entry, u32 reg)
  1236. +@@ -515,7 +514,7 @@ rt2800usb_txdone_entry_check(struct queu
  1237. * frame.
  1238. */
  1239. if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags))
  1240. @@ -150,7 +142,7 @@ index 205a7b8ac8a7..f11e3f532a84 100644
  1241. wcid = rt2x00_get_field32(reg, TX_STA_FIFO_WCID);
  1242. ack = rt2x00_get_field32(reg, TX_STA_FIFO_TX_ACK_REQUIRED);
  1243. -@@ -537,10 +536,10 @@ rt2800usb_txdone_entry_check(struct queue_entry *entry, u32 reg)
  1244. +@@ -537,10 +536,10 @@ rt2800usb_txdone_entry_check(struct queu
  1245. rt2x00_dbg(entry->queue->rt2x00dev,
  1246. "TX status report missed for queue %d entry %d\n",
  1247. entry->queue->qid, entry->entry_idx);
  1248. @@ -163,7 +155,7 @@ index 205a7b8ac8a7..f11e3f532a84 100644
  1249. }
  1250. static void rt2800usb_txdone(struct rt2x00_dev *rt2x00dev)
  1251. -@@ -549,7 +548,7 @@ static void rt2800usb_txdone(struct rt2x00_dev *rt2x00dev)
  1252. +@@ -549,7 +548,7 @@ static void rt2800usb_txdone(struct rt2x
  1253. struct queue_entry *entry;
  1254. u32 reg;
  1255. u8 qid;
  1256. @@ -172,7 +164,7 @@ index 205a7b8ac8a7..f11e3f532a84 100644
  1257. while (kfifo_get(&rt2x00dev->txstatus_fifo, &reg)) {
  1258. /*
  1259. -@@ -574,11 +573,8 @@ static void rt2800usb_txdone(struct rt2x00_dev *rt2x00dev)
  1260. +@@ -574,11 +573,8 @@ static void rt2800usb_txdone(struct rt2x
  1261. break;
  1262. }
  1263. @@ -186,6 +178,3 @@ index 205a7b8ac8a7..f11e3f532a84 100644
  1264. }
  1265. }
  1266. ---
  1267. -2.12.1
  1268. -
  1269. diff --git a/package/kernel/mac80211/patches/020-15-rt2800-status-based-rate-flags-for-nomatch-case.patch b/package/kernel/mac80211/patches/020-15-rt2800-status-based-rate-flags-for-nomatch-case.patch
  1270. index 4e18dc8e2ae984ac809785b4a37d7bcf5b410eaa..37838e889567ddbe8ebec79d91c5b71ed3cbfc8a 100644
  1271. --- a/package/kernel/mac80211/patches/020-15-rt2800-status-based-rate-flags-for-nomatch-case.patch
  1272. +++ b/package/kernel/mac80211/patches/020-15-rt2800-status-based-rate-flags-for-nomatch-case.patch
  1273. @@ -17,8 +17,6 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  1274. drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 35 +++++++++++++++++++++++++-
  1275. 2 files changed, 36 insertions(+), 1 deletion(-)
  1276. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800.h b/drivers/net/wireless/ralink/rt2x00/rt2800.h
  1277. -index 0e7051d8132f..480b08601785 100644
  1278. --- a/drivers/net/wireless/ralink/rt2x00/rt2800.h
  1279. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800.h
  1280. @@ -1760,6 +1760,8 @@
  1281. @@ -30,11 +28,9 @@ index 0e7051d8132f..480b08601785 100644
  1282. #define TX_STA_FIFO_PHYMODE FIELD32(0xc0000000)
  1283. /*
  1284. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  1285. -index 4a7bec708a13..8d00c599e47a 100644
  1286. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  1287. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  1288. -@@ -852,6 +852,39 @@ void rt2800_process_rxwi(struct queue_entry *entry,
  1289. +@@ -852,6 +852,39 @@ void rt2800_process_rxwi(struct queue_en
  1290. }
  1291. EXPORT_SYMBOL_GPL(rt2800_process_rxwi);
  1292. @@ -74,7 +70,7 @@ index 4a7bec708a13..8d00c599e47a 100644
  1293. void rt2800_txdone_entry(struct queue_entry *entry, u32 status, __le32 *txwi,
  1294. bool match)
  1295. {
  1296. -@@ -898,7 +931,7 @@ void rt2800_txdone_entry(struct queue_entry *entry, u32 status, __le32 *txwi,
  1297. +@@ -898,7 +931,7 @@ void rt2800_txdone_entry(struct queue_en
  1298. * and provide retry count.
  1299. */
  1300. if (unlikely((aggr == 1 && ampdu == 0 && real_mcs != mcs)) || !match) {
  1301. @@ -83,6 +79,3 @@ index 4a7bec708a13..8d00c599e47a 100644
  1302. mcs = real_mcs;
  1303. }
  1304. ---
  1305. -2.12.1
  1306. -
  1307. diff --git a/package/kernel/mac80211/patches/020-16-rt2800-use-TXOP_BACKOFF-for-probe-frames.patch b/package/kernel/mac80211/patches/020-16-rt2800-use-TXOP_BACKOFF-for-probe-frames.patch
  1308. index 31d79bb751b05b410f1b84261284e4de347912c6..7825810cef9b978c0e076961af4492b3a9eda344 100644
  1309. --- a/package/kernel/mac80211/patches/020-16-rt2800-use-TXOP_BACKOFF-for-probe-frames.patch
  1310. +++ b/package/kernel/mac80211/patches/020-16-rt2800-use-TXOP_BACKOFF-for-probe-frames.patch
  1311. @@ -14,11 +14,9 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  1312. drivers/net/wireless/ralink/rt2x00/rt2x00queue.c | 7 ++++---
  1313. 1 file changed, 4 insertions(+), 3 deletions(-)
  1314. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
  1315. -index e1660b92b20c..a2c1ca5c76d1 100644
  1316. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
  1317. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
  1318. -@@ -372,15 +372,16 @@ static void rt2x00queue_create_tx_descriptor_ht(struct rt2x00_dev *rt2x00dev,
  1319. +@@ -372,15 +372,16 @@ static void rt2x00queue_create_tx_descri
  1320. /*
  1321. * Determine IFS values
  1322. @@ -38,6 +36,3 @@ index e1660b92b20c..a2c1ca5c76d1 100644
  1323. txdesc->u.ht.txop = TXOP_BACKOFF;
  1324. else if (!(tx_info->flags & IEEE80211_TX_CTL_FIRST_FRAGMENT))
  1325. txdesc->u.ht.txop = TXOP_SIFS;
  1326. ---
  1327. -2.12.1
  1328. -
  1329. diff --git a/package/kernel/mac80211/patches/020-17-rt2x00-fix-rt2x00debug_dump_frame-comment.patch b/package/kernel/mac80211/patches/020-17-rt2x00-fix-rt2x00debug_dump_frame-comment.patch
  1330. index 4e53092d12aac787c365f2ee2be55c333ca71cdd..415bf5b2a6dabf1292a2b54f35e066618ff2d8ac 100644
  1331. --- a/package/kernel/mac80211/patches/020-17-rt2x00-fix-rt2x00debug_dump_frame-comment.patch
  1332. +++ b/package/kernel/mac80211/patches/020-17-rt2x00-fix-rt2x00debug_dump_frame-comment.patch
  1333. @@ -10,11 +10,9 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  1334. drivers/net/wireless/ralink/rt2x00/rt2x00.h | 2 +-
  1335. 1 file changed, 1 insertion(+), 1 deletion(-)
  1336. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00.h b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
  1337. -index 91ba10fdf732..ce340bfd71a0 100644
  1338. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
  1339. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
  1340. -@@ -1396,7 +1396,7 @@ void rt2x00queue_flush_queues(struct rt2x00_dev *rt2x00dev, bool drop);
  1341. +@@ -1396,7 +1396,7 @@ void rt2x00queue_flush_queues(struct rt2
  1342. * rt2x00debug_dump_frame - Dump a frame to userspace through debugfs.
  1343. * @rt2x00dev: Pointer to &struct rt2x00_dev.
  1344. * @type: The type of frame that is being dumped.
  1345. @@ -23,6 +21,3 @@ index 91ba10fdf732..ce340bfd71a0 100644
  1346. */
  1347. #ifdef CPTCFG_RT2X00_LIB_DEBUGFS
  1348. void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev,
  1349. ---
  1350. -2.12.1
  1351. -
  1352. diff --git a/package/kernel/mac80211/patches/020-18-rt2x00-fix-TX_PWR_CFG_4-register-definition.patch b/package/kernel/mac80211/patches/020-18-rt2x00-fix-TX_PWR_CFG_4-register-definition.patch
  1353. index 3cf342d6903e86830d497999ad76750b85c20084..c6fb7dd2c4b926017b023826bff0acebe3bc1501 100644
  1354. --- a/package/kernel/mac80211/patches/020-18-rt2x00-fix-TX_PWR_CFG_4-register-definition.patch
  1355. +++ b/package/kernel/mac80211/patches/020-18-rt2x00-fix-TX_PWR_CFG_4-register-definition.patch
  1356. @@ -13,8 +13,6 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  1357. drivers/net/wireless/ralink/rt2x00/rt2800.h | 8 ++++----
  1358. 1 file changed, 4 insertions(+), 4 deletions(-)
  1359. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800.h b/drivers/net/wireless/ralink/rt2x00/rt2800.h
  1360. -index 480b08601785..fd1dbd956bad 100644
  1361. --- a/drivers/net/wireless/ralink/rt2x00/rt2800.h
  1362. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800.h
  1363. @@ -1171,10 +1171,10 @@
  1364. @@ -32,6 +30,3 @@ index 480b08601785..fd1dbd956bad 100644
  1365. /*
  1366. * TX_PIN_CFG:
  1367. ---
  1368. -2.12.1
  1369. -
  1370. diff --git a/package/kernel/mac80211/patches/020-19-rt2x00-add-support-for-MT7620.patch b/package/kernel/mac80211/patches/020-19-rt2x00-add-support-for-MT7620.patch
  1371. index 7b99312744c7704264b15a52ce4fa70450c62040..b91e5821cdf4b1ece474fb84f222c9220929fa44 100644
  1372. --- a/package/kernel/mac80211/patches/020-19-rt2x00-add-support-for-MT7620.patch
  1373. +++ b/package/kernel/mac80211/patches/020-19-rt2x00-add-support-for-MT7620.patch
  1374. @@ -19,8 +19,6 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  1375. drivers/net/wireless/ralink/rt2x00/rt2x00.h | 1 +
  1376. 5 files changed, 1578 insertions(+), 27 deletions(-)
  1377. -diff --git a/drivers/net/wireless/ralink/rt2x00/Kconfig b/drivers/net/wireless/ralink/rt2x00/Kconfig
  1378. -index de62f5dcb62f..a1d1cfe214d2 100644
  1379. --- a/drivers/net/wireless/ralink/rt2x00/Kconfig
  1380. +++ b/drivers/net/wireless/ralink/rt2x00/Kconfig
  1381. @@ -210,7 +210,7 @@ endif
  1382. @@ -32,8 +30,6 @@ index de62f5dcb62f..a1d1cfe214d2 100644
  1383. select RT2X00_LIB_SOC
  1384. select RT2X00_LIB_MMIO
  1385. select RT2X00_LIB_CRYPTO
  1386. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800.h b/drivers/net/wireless/ralink/rt2x00/rt2800.h
  1387. -index fd1dbd956bad..6a8c93fb6a43 100644
  1388. --- a/drivers/net/wireless/ralink/rt2x00/rt2800.h
  1389. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800.h
  1390. @@ -79,6 +79,7 @@
  1391. @@ -376,8 +372,6 @@ index fd1dbd956bad..6a8c93fb6a43 100644
  1392. EEPROM_TSSI_BOUND_A1,
  1393. EEPROM_TSSI_BOUND_A2,
  1394. EEPROM_TSSI_BOUND_A3,
  1395. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  1396. -index 8d00c599e47a..201b12ed90c6 100644
  1397. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  1398. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  1399. @@ -59,6 +59,9 @@
  1400. @@ -390,7 +384,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1401. #define WAIT_FOR_RF(__dev, __reg) \
  1402. rt2800_regbusy_read((__dev), RF_CSR_CFG0, RF_CSR_CFG0_BUSY, (__reg))
  1403. #define WAIT_FOR_MCU(__dev, __reg) \
  1404. -@@ -150,19 +153,56 @@ static void rt2800_rfcsr_write(struct rt2x00_dev *rt2x00dev,
  1405. +@@ -150,19 +153,56 @@ static void rt2800_rfcsr_write(struct rt
  1406. * Wait until the RFCSR becomes available, afterwards we
  1407. * can safely write the new data into the register.
  1408. */
  1409. @@ -413,8 +407,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1410. + rt2800_register_write_lock(rt2x00dev, RF_CSR_CFG, reg);
  1411. + }
  1412. + break;
  1413. -
  1414. -- rt2800_register_write_lock(rt2x00dev, RF_CSR_CFG, reg);
  1415. ++
  1416. + default:
  1417. + if (WAIT_FOR_RFCSR(rt2x00dev, &reg)) {
  1418. + reg = 0;
  1419. @@ -422,7 +415,8 @@ index 8d00c599e47a..201b12ed90c6 100644
  1420. + rt2x00_set_field32(&reg, RF_CSR_CFG_REGNUM, word);
  1421. + rt2x00_set_field32(&reg, RF_CSR_CFG_WRITE, 1);
  1422. + rt2x00_set_field32(&reg, RF_CSR_CFG_BUSY, 1);
  1423. -+
  1424. +
  1425. +- rt2800_register_write_lock(rt2x00dev, RF_CSR_CFG, reg);
  1426. + rt2800_register_write_lock(rt2x00dev, RF_CSR_CFG, reg);
  1427. + }
  1428. + break;
  1429. @@ -454,7 +448,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1430. static void rt2800_rfcsr_read(struct rt2x00_dev *rt2x00dev,
  1431. const unsigned int word, u8 *value)
  1432. {
  1433. -@@ -178,22 +218,48 @@ static void rt2800_rfcsr_read(struct rt2x00_dev *rt2x00dev,
  1434. +@@ -178,22 +218,48 @@ static void rt2800_rfcsr_read(struct rt2
  1435. * doesn't become available in time, reg will be 0xffffffff
  1436. * which means we return 0xff to the caller.
  1437. */
  1438. @@ -479,11 +473,11 @@ index 8d00c599e47a..201b12ed90c6 100644
  1439. - }
  1440. + WAIT_FOR_RFCSR_MT7620(rt2x00dev, &reg);
  1441. + }
  1442. -
  1443. -- *value = rt2x00_get_field32(reg, RF_CSR_CFG_DATA);
  1444. ++
  1445. + *value = rt2x00_get_field32(reg, RF_CSR_CFG_DATA_MT7620);
  1446. + break;
  1447. -+
  1448. +
  1449. +- *value = rt2x00_get_field32(reg, RF_CSR_CFG_DATA);
  1450. + default:
  1451. + if (WAIT_FOR_RFCSR(rt2x00dev, &reg)) {
  1452. + reg = 0;
  1453. @@ -512,7 +506,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1454. static void rt2800_rf_write(struct rt2x00_dev *rt2x00dev,
  1455. const unsigned int word, const u32 value)
  1456. {
  1457. -@@ -250,6 +316,7 @@ static const unsigned int rt2800_eeprom_map[EEPROM_WORD_COUNT] = {
  1458. +@@ -250,6 +316,7 @@ static const unsigned int rt2800_eeprom_
  1459. [EEPROM_TSSI_BOUND_BG5] = 0x003b,
  1460. [EEPROM_TXPOWER_A1] = 0x003c,
  1461. [EEPROM_TXPOWER_A2] = 0x0053,
  1462. @@ -520,7 +514,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1463. [EEPROM_TSSI_BOUND_A1] = 0x006a,
  1464. [EEPROM_TSSI_BOUND_A2] = 0x006b,
  1465. [EEPROM_TSSI_BOUND_A3] = 0x006c,
  1466. -@@ -524,6 +591,7 @@ void rt2800_get_txwi_rxwi_size(struct rt2x00_dev *rt2x00dev,
  1467. +@@ -524,6 +591,7 @@ void rt2800_get_txwi_rxwi_size(struct rt
  1468. break;
  1469. case RT5592:
  1470. @@ -528,7 +522,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1471. *txwi_size = TXWI_DESC_SIZE_5WORDS;
  1472. *rxwi_size = RXWI_DESC_SIZE_6WORDS;
  1473. break;
  1474. -@@ -2810,7 +2878,8 @@ static void rt2800_config_channel_rf53xx(struct rt2x00_dev *rt2x00dev,
  1475. +@@ -2810,7 +2878,8 @@ static void rt2800_config_channel_rf53xx
  1476. rt2800_rfcsr_write(rt2x00dev, 59,
  1477. r59_nonbt_rev[idx]);
  1478. } else if (rt2x00_rt(rt2x00dev, RT5390) ||
  1479. @@ -538,7 +532,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1480. static const char r59_non_bt[] = {0x8f, 0x8f,
  1481. 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8d,
  1482. 0x8a, 0x88, 0x88, 0x87, 0x87, 0x86};
  1483. -@@ -3104,6 +3173,242 @@ static void rt2800_config_channel_rf55xx(struct rt2x00_dev *rt2x00dev,
  1484. +@@ -3104,6 +3173,242 @@ static void rt2800_config_channel_rf55xx
  1485. rt2800_bbp_write(rt2x00dev, 196, (rf->channel <= 14) ? 0x19 : 0x7F);
  1486. }
  1487. @@ -781,7 +775,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1488. static void rt2800_bbp_write_with_rx_chain(struct rt2x00_dev *rt2x00dev,
  1489. const unsigned int word,
  1490. const u8 value)
  1491. -@@ -3228,7 +3533,7 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
  1492. +@@ -3228,7 +3533,7 @@ static void rt2800_config_channel(struct
  1493. struct channel_info *info)
  1494. {
  1495. u32 reg;
  1496. @@ -790,7 +784,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1497. u8 bbp, rfcsr;
  1498. info->default_power1 = rt2800_txpower_to_dev(rt2x00dev, rf->channel,
  1499. -@@ -3273,6 +3578,9 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
  1500. +@@ -3273,6 +3578,9 @@ static void rt2800_config_channel(struct
  1501. case RF5592:
  1502. rt2800_config_channel_rf55xx(rt2x00dev, conf, rf, info);
  1503. break;
  1504. @@ -800,7 +794,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1505. default:
  1506. rt2800_config_channel_rf2xxx(rt2x00dev, conf, rf, info);
  1507. }
  1508. -@@ -3347,7 +3655,8 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
  1509. +@@ -3347,7 +3655,8 @@ static void rt2800_config_channel(struct
  1510. if (rf->channel <= 14) {
  1511. if (!rt2x00_rt(rt2x00dev, RT5390) &&
  1512. @@ -810,7 +804,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1513. if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
  1514. rt2800_bbp_write(rt2x00dev, 82, 0x62);
  1515. rt2800_bbp_write(rt2x00dev, 75, 0x46);
  1516. -@@ -3367,7 +3676,7 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
  1517. +@@ -3367,7 +3676,7 @@ static void rt2800_config_channel(struct
  1518. rt2800_bbp_write(rt2x00dev, 82, 0x94);
  1519. else if (rt2x00_rt(rt2x00dev, RT3593))
  1520. rt2800_bbp_write(rt2x00dev, 82, 0x82);
  1521. @@ -819,7 +813,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1522. rt2800_bbp_write(rt2x00dev, 82, 0xf2);
  1523. if (rt2x00_rt(rt2x00dev, RT3593))
  1524. -@@ -3388,7 +3697,7 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
  1525. +@@ -3388,7 +3697,7 @@ static void rt2800_config_channel(struct
  1526. if (rt2x00_rt(rt2x00dev, RT3572))
  1527. rt2800_rfcsr_write(rt2x00dev, 8, 0);
  1528. @@ -828,7 +822,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1529. switch (rt2x00dev->default_ant.tx_chain_num) {
  1530. case 3:
  1531. -@@ -3437,6 +3746,7 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
  1532. +@@ -3437,6 +3746,7 @@ static void rt2800_config_channel(struct
  1533. rt2x00_set_field32(&tx_pin, TX_PIN_CFG_RFTR_EN, 1);
  1534. rt2x00_set_field32(&tx_pin, TX_PIN_CFG_TRSW_EN, 1);
  1535. @@ -836,7 +830,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1536. rt2800_register_write(rt2x00dev, TX_PIN_CFG, tx_pin);
  1537. -@@ -3495,7 +3805,7 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
  1538. +@@ -3495,7 +3805,7 @@ static void rt2800_config_channel(struct
  1539. usleep_range(1000, 1500);
  1540. }
  1541. @@ -845,7 +839,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1542. rt2800_bbp_write(rt2x00dev, 195, 141);
  1543. rt2800_bbp_write(rt2x00dev, 196, conf_is_ht40(conf) ? 0x10 : 0x1a);
  1544. -@@ -4182,6 +4492,128 @@ static void rt2800_config_txpower_rt3593(struct rt2x00_dev *rt2x00dev,
  1545. +@@ -4182,6 +4492,128 @@ static void rt2800_config_txpower_rt3593
  1546. (unsigned long) regs[i]);
  1547. }
  1548. @@ -974,7 +968,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1549. /*
  1550. * We configure transmit power using MAC TX_PWR_CFG_{0,...,N} registers and
  1551. * BBP R1 register. TX_PWR_CFG_X allow to configure per rate TX power values,
  1552. -@@ -4378,6 +4810,8 @@ static void rt2800_config_txpower(struct rt2x00_dev *rt2x00dev,
  1553. +@@ -4378,6 +4810,8 @@ static void rt2800_config_txpower(struct
  1554. {
  1555. if (rt2x00_rt(rt2x00dev, RT3593))
  1556. rt2800_config_txpower_rt3593(rt2x00dev, chan, power_level);
  1557. @@ -983,7 +977,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1558. else
  1559. rt2800_config_txpower_rt28xx(rt2x00dev, chan, power_level);
  1560. }
  1561. -@@ -4393,6 +4827,7 @@ void rt2800_vco_calibration(struct rt2x00_dev *rt2x00dev)
  1562. +@@ -4393,6 +4827,7 @@ void rt2800_vco_calibration(struct rt2x0
  1563. {
  1564. u32 tx_pin;
  1565. u8 rfcsr;
  1566. @@ -991,7 +985,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1567. /*
  1568. * A voltage-controlled oscillator(VCO) is an electronic oscillator
  1569. -@@ -4431,6 +4866,15 @@ void rt2800_vco_calibration(struct rt2x00_dev *rt2x00dev)
  1570. +@@ -4431,6 +4866,15 @@ void rt2800_vco_calibration(struct rt2x0
  1571. rt2800_rfcsr_read(rt2x00dev, 3, &rfcsr);
  1572. rt2x00_set_field8(&rfcsr, RFCSR3_VCOCAL_EN, 1);
  1573. rt2800_rfcsr_write(rt2x00dev, 3, rfcsr);
  1574. @@ -1007,7 +1001,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1575. break;
  1576. default:
  1577. WARN_ONCE(1, "Not supported RF chipet %x for VCO recalibration",
  1578. -@@ -4438,7 +4882,8 @@ void rt2800_vco_calibration(struct rt2x00_dev *rt2x00dev)
  1579. +@@ -4438,7 +4882,8 @@ void rt2800_vco_calibration(struct rt2x0
  1580. return;
  1581. }
  1582. @@ -1017,7 +1011,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1583. rt2800_register_read(rt2x00dev, TX_PIN_CFG, &tx_pin);
  1584. if (rt2x00dev->rf_channel <= 14) {
  1585. -@@ -4470,6 +4915,42 @@ void rt2800_vco_calibration(struct rt2x00_dev *rt2x00dev)
  1586. +@@ -4470,6 +4915,42 @@ void rt2800_vco_calibration(struct rt2x0
  1587. }
  1588. rt2800_register_write(rt2x00dev, TX_PIN_CFG, tx_pin);
  1589. @@ -1060,7 +1054,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1590. }
  1591. EXPORT_SYMBOL_GPL(rt2800_vco_calibration);
  1592. -@@ -4568,7 +5049,8 @@ static u8 rt2800_get_default_vgc(struct rt2x00_dev *rt2x00dev)
  1593. +@@ -4568,7 +5049,8 @@ static u8 rt2800_get_default_vgc(struct
  1594. rt2x00_rt(rt2x00dev, RT3593) ||
  1595. rt2x00_rt(rt2x00dev, RT5390) ||
  1596. rt2x00_rt(rt2x00dev, RT5392) ||
  1597. @@ -1070,7 +1064,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1598. vgc = 0x1c + (2 * rt2x00dev->lna_gain);
  1599. else
  1600. vgc = 0x2e + rt2x00dev->lna_gain;
  1601. -@@ -4795,7 +5277,8 @@ static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)
  1602. +@@ -4795,7 +5277,8 @@ static int rt2800_init_registers(struct
  1603. 0x00000000);
  1604. }
  1605. } else if (rt2x00_rt(rt2x00dev, RT5390) ||
  1606. @@ -1080,7 +1074,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1607. rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000404);
  1608. rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606);
  1609. rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000);
  1610. -@@ -4805,6 +5288,24 @@ static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)
  1611. +@@ -4805,6 +5288,24 @@ static int rt2800_init_registers(struct
  1612. rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000);
  1613. } else if (rt2x00_rt(rt2x00dev, RT5350)) {
  1614. rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000404);
  1615. @@ -1105,7 +1099,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1616. } else {
  1617. rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000000);
  1618. rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606);
  1619. -@@ -5786,6 +6287,231 @@ static void rt2800_init_bbp_5592(struct rt2x00_dev *rt2x00dev)
  1620. +@@ -5786,6 +6287,231 @@ static void rt2800_init_bbp_5592(struct
  1621. rt2800_bbp_write(rt2x00dev, 103, 0xc0);
  1622. }
  1623. @@ -1337,7 +1331,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1624. static void rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
  1625. {
  1626. unsigned int i;
  1627. -@@ -5830,6 +6556,9 @@ static void rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
  1628. +@@ -5830,6 +6556,9 @@ static void rt2800_init_bbp(struct rt2x0
  1629. case RT5592:
  1630. rt2800_init_bbp_5592(rt2x00dev);
  1631. return;
  1632. @@ -1347,7 +1341,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1633. }
  1634. for (i = 0; i < EEPROM_BBP_SIZE; i++) {
  1635. -@@ -6901,6 +7630,615 @@ static void rt2800_init_rfcsr_5592(struct rt2x00_dev *rt2x00dev)
  1636. +@@ -6901,6 +7630,615 @@ static void rt2800_init_rfcsr_5592(struc
  1637. rt2800_led_open_drain_enable(rt2x00dev);
  1638. }
  1639. @@ -1963,7 +1957,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1640. static void rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev)
  1641. {
  1642. if (rt2800_is_305x_soc(rt2x00dev)) {
  1643. -@@ -6941,6 +8279,9 @@ static void rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev)
  1644. +@@ -6941,6 +8279,9 @@ static void rt2800_init_rfcsr(struct rt2
  1645. case RT5592:
  1646. rt2800_init_rfcsr_5592(rt2x00dev);
  1647. break;
  1648. @@ -1973,7 +1967,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1649. }
  1650. }
  1651. -@@ -7307,7 +8648,8 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
  1652. +@@ -7307,7 +8648,8 @@ static int rt2800_init_eeprom(struct rt2
  1653. */
  1654. if (rt2x00_rt(rt2x00dev, RT3290) ||
  1655. rt2x00_rt(rt2x00dev, RT5390) ||
  1656. @@ -1983,7 +1977,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1657. rt2800_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf);
  1658. else if (rt2x00_rt(rt2x00dev, RT3352))
  1659. rf = RF3322;
  1660. -@@ -7339,6 +8681,7 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
  1661. +@@ -7339,6 +8681,7 @@ static int rt2800_init_eeprom(struct rt2
  1662. case RF5390:
  1663. case RF5392:
  1664. case RF5592:
  1665. @@ -1991,7 +1985,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1666. break;
  1667. default:
  1668. rt2x00_err(rt2x00dev, "Invalid RF chipset 0x%04x detected\n",
  1669. -@@ -7746,6 +9089,23 @@ static const struct rf_channel rf_vals_5592_xtal40[] = {
  1670. +@@ -7746,6 +9089,23 @@ static const struct rf_channel rf_vals_5
  1671. {196, 83, 0, 12, 1},
  1672. };
  1673. @@ -2015,7 +2009,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1674. static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
  1675. {
  1676. struct hw_mode_spec *spec = &rt2x00dev->spec;
  1677. -@@ -7849,6 +9209,11 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
  1678. +@@ -7849,6 +9209,11 @@ static int rt2800_probe_hw_mode(struct r
  1679. spec->channels = rf_vals_3x;
  1680. break;
  1681. @@ -2027,7 +2021,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1682. case RF3052:
  1683. case RF3053:
  1684. spec->num_channels = ARRAY_SIZE(rf_vals_3x);
  1685. -@@ -7980,6 +9345,7 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
  1686. +@@ -7980,6 +9345,7 @@ static int rt2800_probe_hw_mode(struct r
  1687. case RF5390:
  1688. case RF5392:
  1689. case RF5592:
  1690. @@ -2035,7 +2029,7 @@ index 8d00c599e47a..201b12ed90c6 100644
  1691. __set_bit(CAPABILITY_VCO_RECALIBRATION, &rt2x00dev->cap_flags);
  1692. break;
  1693. }
  1694. -@@ -8024,6 +9390,9 @@ static int rt2800_probe_rt(struct rt2x00_dev *rt2x00dev)
  1695. +@@ -8024,6 +9390,9 @@ static int rt2800_probe_rt(struct rt2x00
  1696. return -ENODEV;
  1697. }
  1698. @@ -2045,8 +2039,6 @@ index 8d00c599e47a..201b12ed90c6 100644
  1699. rt2x00_set_rt(rt2x00dev, rt, rev);
  1700. return 0;
  1701. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
  1702. -index d9ef260d542a..f357531d9488 100644
  1703. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
  1704. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
  1705. @@ -33,6 +33,10 @@
  1706. @@ -2060,8 +2052,6 @@ index d9ef260d542a..f357531d9488 100644
  1707. u8 bbp25;
  1708. u8 bbp26;
  1709. u8 txmixer_gain_24g;
  1710. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00.h b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
  1711. -index ce340bfd71a0..8fdd2f9726ee 100644
  1712. --- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
  1713. +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
  1714. @@ -174,6 +174,7 @@ struct rt2x00_chip {
  1715. @@ -2072,6 +2062,3 @@ index ce340bfd71a0..8fdd2f9726ee 100644
  1716. u16 rf;
  1717. u16 rev;
  1718. ---
  1719. -2.12.1
  1720. -
  1721. diff --git a/package/kernel/mac80211/patches/020-20-rt2x00-reverse-external-PA-capability-flag-logic.patch b/package/kernel/mac80211/patches/020-20-rt2x00-reverse-external-PA-capability-flag-logic.patch
  1722. new file mode 100644
  1723. index 0000000000000000000000000000000000000000..7994456de71a9b6115a34e307024b59043c80aec
  1724. --- /dev/null
  1725. +++ b/package/kernel/mac80211/patches/020-20-rt2x00-reverse-external-PA-capability-flag-logic.patch
  1726. @@ -0,0 +1,121 @@
  1727. +From 1f242a3de702d5a19c479685d35b050837122724 Mon Sep 17 00:00:00 2001
  1728. +From: Daniel Golle <daniel@makrotopia.org>
  1729. +Date: Mon, 10 Apr 2017 15:29:45 +0200
  1730. +Subject: [PATCH] rt2x00: reverse external PA capability flag logic
  1731. +
  1732. +Consequently refer to external PA instead of inverting the logic and
  1733. +use an internal PA capability flag which is a bit confusing.
  1734. +Currently this is used for Rt3352 only, but MT7620A also allows for an
  1735. +external PA which will be supported by a follow up patch.
  1736. +
  1737. +Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  1738. +Acked-by: Stanislaw Gruszka <sgruszka@redhat.com>
  1739. +Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  1740. +---
  1741. + drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 40 +++++++++++++-------------
  1742. + drivers/net/wireless/ralink/rt2x00/rt2x00.h | 4 +--
  1743. + 2 files changed, 22 insertions(+), 22 deletions(-)
  1744. +
  1745. +--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  1746. ++++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  1747. +@@ -7014,9 +7014,9 @@ static void rt2800_init_rfcsr_3290(struc
  1748. +
  1749. + static void rt2800_init_rfcsr_3352(struct rt2x00_dev *rt2x00dev)
  1750. + {
  1751. +- int tx0_int_pa = test_bit(CAPABILITY_INTERNAL_PA_TX0,
  1752. ++ int tx0_ext_pa = test_bit(CAPABILITY_EXTERNAL_PA_TX0,
  1753. + &rt2x00dev->cap_flags);
  1754. +- int tx1_int_pa = test_bit(CAPABILITY_INTERNAL_PA_TX1,
  1755. ++ int tx1_ext_pa = test_bit(CAPABILITY_EXTERNAL_PA_TX1,
  1756. + &rt2x00dev->cap_flags);
  1757. + u8 rfcsr;
  1758. +
  1759. +@@ -7056,9 +7056,9 @@ static void rt2800_init_rfcsr_3352(struc
  1760. + rt2800_rfcsr_write(rt2x00dev, 32, 0x80);
  1761. + rt2800_rfcsr_write(rt2x00dev, 33, 0x00);
  1762. + rfcsr = 0x01;
  1763. +- if (!tx0_int_pa)
  1764. ++ if (tx0_ext_pa)
  1765. + rt2x00_set_field8(&rfcsr, RFCSR34_TX0_EXT_PA, 1);
  1766. +- if (!tx1_int_pa)
  1767. ++ if (tx1_ext_pa)
  1768. + rt2x00_set_field8(&rfcsr, RFCSR34_TX1_EXT_PA, 1);
  1769. + rt2800_rfcsr_write(rt2x00dev, 34, rfcsr);
  1770. + rt2800_rfcsr_write(rt2x00dev, 35, 0x03);
  1771. +@@ -7068,13 +7068,13 @@ static void rt2800_init_rfcsr_3352(struc
  1772. + rt2800_rfcsr_write(rt2x00dev, 39, 0xc5);
  1773. + rt2800_rfcsr_write(rt2x00dev, 40, 0x33);
  1774. + rfcsr = 0x52;
  1775. +- if (tx0_int_pa) {
  1776. ++ if (!tx0_ext_pa) {
  1777. + rt2x00_set_field8(&rfcsr, RFCSR41_BIT1, 1);
  1778. + rt2x00_set_field8(&rfcsr, RFCSR41_BIT4, 1);
  1779. + }
  1780. + rt2800_rfcsr_write(rt2x00dev, 41, rfcsr);
  1781. + rfcsr = 0x52;
  1782. +- if (tx1_int_pa) {
  1783. ++ if (!tx1_ext_pa) {
  1784. + rt2x00_set_field8(&rfcsr, RFCSR42_BIT1, 1);
  1785. + rt2x00_set_field8(&rfcsr, RFCSR42_BIT4, 1);
  1786. + }
  1787. +@@ -7087,19 +7087,19 @@ static void rt2800_init_rfcsr_3352(struc
  1788. + rt2800_rfcsr_write(rt2x00dev, 48, 0x14);
  1789. + rt2800_rfcsr_write(rt2x00dev, 49, 0x00);
  1790. + rfcsr = 0x2d;
  1791. +- if (!tx0_int_pa)
  1792. ++ if (tx0_ext_pa)
  1793. + rt2x00_set_field8(&rfcsr, RFCSR50_TX0_EXT_PA, 1);
  1794. +- if (!tx1_int_pa)
  1795. ++ if (tx1_ext_pa)
  1796. + rt2x00_set_field8(&rfcsr, RFCSR50_TX1_EXT_PA, 1);
  1797. + rt2800_rfcsr_write(rt2x00dev, 50, rfcsr);
  1798. +- rt2800_rfcsr_write(rt2x00dev, 51, (tx0_int_pa ? 0x7f : 0x52));
  1799. +- rt2800_rfcsr_write(rt2x00dev, 52, (tx0_int_pa ? 0x00 : 0xc0));
  1800. +- rt2800_rfcsr_write(rt2x00dev, 53, (tx0_int_pa ? 0x52 : 0xd2));
  1801. +- rt2800_rfcsr_write(rt2x00dev, 54, (tx0_int_pa ? 0x1b : 0xc0));
  1802. +- rt2800_rfcsr_write(rt2x00dev, 55, (tx1_int_pa ? 0x7f : 0x52));
  1803. +- rt2800_rfcsr_write(rt2x00dev, 56, (tx1_int_pa ? 0x00 : 0xc0));
  1804. +- rt2800_rfcsr_write(rt2x00dev, 57, (tx0_int_pa ? 0x52 : 0x49));
  1805. +- rt2800_rfcsr_write(rt2x00dev, 58, (tx1_int_pa ? 0x1b : 0xc0));
  1806. ++ rt2800_rfcsr_write(rt2x00dev, 51, (tx0_ext_pa ? 0x52 : 0x7f));
  1807. ++ rt2800_rfcsr_write(rt2x00dev, 52, (tx0_ext_pa ? 0xc0 : 0x00));
  1808. ++ rt2800_rfcsr_write(rt2x00dev, 53, (tx0_ext_pa ? 0xd2 : 0x52));
  1809. ++ rt2800_rfcsr_write(rt2x00dev, 54, (tx0_ext_pa ? 0xc0 : 0x1b));
  1810. ++ rt2800_rfcsr_write(rt2x00dev, 55, (tx1_ext_pa ? 0x52 : 0x7f));
  1811. ++ rt2800_rfcsr_write(rt2x00dev, 56, (tx1_ext_pa ? 0xc0 : 0x00));
  1812. ++ rt2800_rfcsr_write(rt2x00dev, 57, (tx0_ext_pa ? 0x49 : 0x52));
  1813. ++ rt2800_rfcsr_write(rt2x00dev, 58, (tx1_ext_pa ? 0xc0 : 0x1b));
  1814. + rt2800_rfcsr_write(rt2x00dev, 59, 0x00);
  1815. + rt2800_rfcsr_write(rt2x00dev, 60, 0x00);
  1816. + rt2800_rfcsr_write(rt2x00dev, 61, 0x00);
  1817. +@@ -8782,13 +8782,13 @@ static int rt2800_init_eeprom(struct rt2
  1818. + rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom);
  1819. +
  1820. + if (rt2x00_rt(rt2x00dev, RT3352)) {
  1821. +- if (!rt2x00_get_field16(eeprom,
  1822. ++ if (rt2x00_get_field16(eeprom,
  1823. + EEPROM_NIC_CONF1_EXTERNAL_TX0_PA_3352))
  1824. +- __set_bit(CAPABILITY_INTERNAL_PA_TX0,
  1825. ++ __set_bit(CAPABILITY_EXTERNAL_PA_TX0,
  1826. + &rt2x00dev->cap_flags);
  1827. +- if (!rt2x00_get_field16(eeprom,
  1828. ++ if (rt2x00_get_field16(eeprom,
  1829. + EEPROM_NIC_CONF1_EXTERNAL_TX1_PA_3352))
  1830. +- __set_bit(CAPABILITY_INTERNAL_PA_TX1,
  1831. ++ __set_bit(CAPABILITY_EXTERNAL_PA_TX1,
  1832. + &rt2x00dev->cap_flags);
  1833. + }
  1834. +
  1835. +--- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
  1836. ++++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
  1837. +@@ -719,8 +719,8 @@ enum rt2x00_capability_flags {
  1838. + CAPABILITY_DOUBLE_ANTENNA,
  1839. + CAPABILITY_BT_COEXIST,
  1840. + CAPABILITY_VCO_RECALIBRATION,
  1841. +- CAPABILITY_INTERNAL_PA_TX0,
  1842. +- CAPABILITY_INTERNAL_PA_TX1,
  1843. ++ CAPABILITY_EXTERNAL_PA_TX0,
  1844. ++ CAPABILITY_EXTERNAL_PA_TX1,
  1845. + };
  1846. +
  1847. + /*
  1848. diff --git a/package/kernel/mac80211/patches/020-21-rt2800-fix-LNA-gain-assignment-for-MT7620.patch b/package/kernel/mac80211/patches/020-21-rt2800-fix-LNA-gain-assignment-for-MT7620.patch
  1849. new file mode 100644
  1850. index 0000000000000000000000000000000000000000..71a4ffea45879af5f8fda8dca253b23b9abd752b
  1851. --- /dev/null
  1852. +++ b/package/kernel/mac80211/patches/020-21-rt2800-fix-LNA-gain-assignment-for-MT7620.patch
  1853. @@ -0,0 +1,49 @@
  1854. +From 0109238d62a99ea779a7e28e21868118e7b8d69d Mon Sep 17 00:00:00 2001
  1855. +From: Daniel Golle <daniel@makrotopia.org>
  1856. +Date: Mon, 10 Apr 2017 14:28:14 +0200
  1857. +Subject: [PATCH 1/2] rt2800: fix LNA gain assignment for MT7620
  1858. +To: Stanislaw Gruszka <sgruszka@redhat.com>
  1859. +Cc: Helmut Schaa <helmut.schaa@googlemail.com>,
  1860. + linux-wireless@vger.kernel.org,
  1861. + Kalle Valo <kvalo@codeaurora.org>
  1862. +
  1863. +The base value used for MT7620 differs from Rt5392 which resulted in
  1864. +quite bad RX signal quality. Fix this by using the correct base value as
  1865. +well as the LNA calibration values for HT20.
  1866. +
  1867. +Reported-by: Tom Psyborg <pozega.tomislav@gmail.com>
  1868. +Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  1869. +---
  1870. + drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 18 ++++++++++++++++--
  1871. + 1 file changed, 16 insertions(+), 2 deletions(-)
  1872. +
  1873. +--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  1874. ++++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  1875. +@@ -3806,11 +3806,25 @@ static void rt2800_config_channel(struct
  1876. + }
  1877. +
  1878. + if (rt2x00_rt(rt2x00dev, RT5592) || rt2x00_rt(rt2x00dev, RT6352)) {
  1879. ++ reg = 0x10;
  1880. ++ if (!conf_is_ht40(conf)) {
  1881. ++ if (rt2x00_rt(rt2x00dev, RT6352) &&
  1882. ++ rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
  1883. ++ reg |= 0x5;
  1884. ++ } else {
  1885. ++ reg |= 0xa;
  1886. ++ }
  1887. ++ }
  1888. + rt2800_bbp_write(rt2x00dev, 195, 141);
  1889. +- rt2800_bbp_write(rt2x00dev, 196, conf_is_ht40(conf) ? 0x10 : 0x1a);
  1890. ++ rt2800_bbp_write(rt2x00dev, 196, reg);
  1891. +
  1892. + /* AGC init */
  1893. +- reg = (rf->channel <= 14 ? 0x1c : 0x24) + 2 * rt2x00dev->lna_gain;
  1894. ++ if (rt2x00_rt(rt2x00dev, RT6352))
  1895. ++ reg = 0x04;
  1896. ++ else
  1897. ++ reg = rf->channel <= 14 ? 0x1c : 0x24;
  1898. ++
  1899. ++ reg += 2 * rt2x00dev->lna_gain;
  1900. + rt2800_bbp_write_with_rx_chain(rt2x00dev, 66, reg);
  1901. +
  1902. + rt2800_iq_calibrate(rt2x00dev, rf->channel);
  1903. diff --git a/package/kernel/mac80211/patches/020-22-rt2800-do-VCO-calibration-after-programming-ALC.patch b/package/kernel/mac80211/patches/020-22-rt2800-do-VCO-calibration-after-programming-ALC.patch
  1904. new file mode 100644
  1905. index 0000000000000000000000000000000000000000..3d76408cd24c9fe9029202b3aa2efa891137ab2f
  1906. --- /dev/null
  1907. +++ b/package/kernel/mac80211/patches/020-22-rt2800-do-VCO-calibration-after-programming-ALC.patch
  1908. @@ -0,0 +1,29 @@
  1909. +From feb608c7986c14bab153f31f8e96f251072e6578 Mon Sep 17 00:00:00 2001
  1910. +From: Daniel Golle <daniel@makrotopia.org>
  1911. +Date: Mon, 10 Apr 2017 15:33:20 +0200
  1912. +Subject: [PATCH 2/2] rt2800: do VCO calibration after programming ALC
  1913. +To: Stanislaw Gruszka <sgruszka@redhat.com>
  1914. +Cc: Helmut Schaa <helmut.schaa@googlemail.com>,
  1915. + linux-wireless@vger.kernel.org,
  1916. + Kalle Valo <kvalo@codeaurora.org>
  1917. +
  1918. +Scanning fails if we don't do VCO calibration every time.
  1919. +The vendor driver duplicates the VCO calibration function into the
  1920. +channel switching logic, we can do the same with less duplication.
  1921. +
  1922. +Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  1923. +---
  1924. + drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 2 ++
  1925. + 1 file changed, 2 insertions(+)
  1926. +
  1927. +--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  1928. ++++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  1929. +@@ -3407,6 +3407,8 @@ static void rt2800_config_alc(struct rt2
  1930. + rt2800_rfcsr_write(rt2x00dev, 42, 0x5b);
  1931. + }
  1932. + rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, mac_sys_ctrl);
  1933. ++
  1934. ++ rt2800_vco_calibration(rt2x00dev);
  1935. + }
  1936. +
  1937. + static void rt2800_bbp_write_with_rx_chain(struct rt2x00_dev *rt2x00dev,
  1938. diff --git a/package/kernel/mac80211/patches/020-23-rt2800-fix-mt7620-vco-calibration-registers.patch b/package/kernel/mac80211/patches/020-23-rt2800-fix-mt7620-vco-calibration-registers.patch
  1939. new file mode 100644
  1940. index 0000000000000000000000000000000000000000..360d06e8f8d4a3d8dd99ff1c6ed2d82b7618b5ca
  1941. --- /dev/null
  1942. +++ b/package/kernel/mac80211/patches/020-23-rt2800-fix-mt7620-vco-calibration-registers.patch
  1943. @@ -0,0 +1,45 @@
  1944. +From 02c452f317b4a4d06c433c294e66896a389731c1 Mon Sep 17 00:00:00 2001
  1945. +From: Daniel Golle <daniel@makrotopia.org>
  1946. +Date: Tue, 18 Apr 2017 11:09:53 +0200
  1947. +Subject: [PATCH] rt2800: fix mt7620 vco calibration registers
  1948. +MIME-Version: 1.0
  1949. +Content-Type: text/plain; charset=UTF-8
  1950. +Content-Transfer-Encoding: 8bit
  1951. +To: Stanislaw Gruszka <sgruszka@redhat.com>
  1952. +Cc: Helmut Schaa <helmut.schaa@googlemail.com>,
  1953. + linux-wireless@vger.kernel.org,
  1954. + Kalle Valo <kvalo@codeaurora.org>,
  1955. + Tom Psyborg <pozega.tomislav@gmail.com>
  1956. +
  1957. +Use register values from init LNA function instead of the ones from
  1958. +restore LNA function. Apply register values based on rx path
  1959. +configuration.
  1960. +
  1961. +Signed-off-by: Tomislav Požega <pozega.tomislav@gmail.com>
  1962. +Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  1963. +---
  1964. + drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 6 +++---
  1965. + 1 file changed, 3 insertions(+), 3 deletions(-)
  1966. +
  1967. +--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  1968. ++++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  1969. +@@ -4932,7 +4932,7 @@ void rt2800_vco_calibration(struct rt2x0
  1970. + rt2800_register_write(rt2x00dev, TX_PIN_CFG, tx_pin);
  1971. +
  1972. + if (rt2x00_rt(rt2x00dev, RT6352)) {
  1973. +- if (rt2x00dev->default_ant.tx_chain_num == 1) {
  1974. ++ if (rt2x00dev->default_ant.rx_chain_num == 1) {
  1975. + rt2800_bbp_write(rt2x00dev, 91, 0x07);
  1976. + rt2800_bbp_write(rt2x00dev, 95, 0x1A);
  1977. + rt2800_bbp_write(rt2x00dev, 195, 128);
  1978. +@@ -4953,8 +4953,8 @@ void rt2800_vco_calibration(struct rt2x0
  1979. + }
  1980. +
  1981. + if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
  1982. +- rt2800_bbp_write(rt2x00dev, 75, 0x60);
  1983. +- rt2800_bbp_write(rt2x00dev, 76, 0x44);
  1984. ++ rt2800_bbp_write(rt2x00dev, 75, 0x68);
  1985. ++ rt2800_bbp_write(rt2x00dev, 76, 0x4C);
  1986. + rt2800_bbp_write(rt2x00dev, 79, 0x1C);
  1987. + rt2800_bbp_write(rt2x00dev, 80, 0x0C);
  1988. + rt2800_bbp_write(rt2x00dev, 82, 0xB6);
  1989. diff --git a/package/kernel/mac80211/patches/020-24-rt2800-fix-mt7620-E2-channel-registers.patch b/package/kernel/mac80211/patches/020-24-rt2800-fix-mt7620-E2-channel-registers.patch
  1990. new file mode 100644
  1991. index 0000000000000000000000000000000000000000..92c2134845a7e239593e5a474995d0b7b5e0541f
  1992. --- /dev/null
  1993. +++ b/package/kernel/mac80211/patches/020-24-rt2800-fix-mt7620-E2-channel-registers.patch
  1994. @@ -0,0 +1,36 @@
  1995. +From c426cb0ed15ee12dfdc8c53ddd1449ac617023cf Mon Sep 17 00:00:00 2001
  1996. +From: Daniel Golle <daniel@makrotopia.org>
  1997. +Date: Tue, 18 Apr 2017 11:45:37 +0200
  1998. +Subject: [PATCH] rt2800: fix mt7620 E2 channel registers
  1999. +To: Stanislaw Gruszka <sgruszka@redhat.com>
  2000. +Cc: Helmut Schaa <helmut.schaa@googlemail.com>,
  2001. + linux-wireless@vger.kernel.org,
  2002. + Kalle Valo <kvalo@codeaurora.org>,
  2003. + Tom Psyborg <pozega.tomislav@gmail.com>
  2004. +
  2005. +From: Tomislav Požega <pozega.tomislav@gmail.com>
  2006. +
  2007. +update RF register 47 and 54 values according to vendor driver
  2008. +
  2009. +Signed-off-by: Tomislav Požega <pozega.tomislav@gmail.com>
  2010. +Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  2011. +---
  2012. + drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 6 ++++--
  2013. + 1 file changed, 4 insertions(+), 2 deletions(-)
  2014. +
  2015. +--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  2016. ++++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  2017. +@@ -8145,9 +8145,11 @@ static void rt2800_init_rfcsr_6352(struc
  2018. + rt2800_rfcsr_write_chanreg(rt2x00dev, 44, 0xB3);
  2019. + rt2800_rfcsr_write_chanreg(rt2x00dev, 45, 0xD5);
  2020. + rt2800_rfcsr_write_chanreg(rt2x00dev, 46, 0x27);
  2021. +- rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x69);
  2022. ++ rt2800_rfcsr_write_bank(rt2x00dev, 4, 47, 0x67);
  2023. ++ rt2800_rfcsr_write_bank(rt2x00dev, 6, 47, 0x69);
  2024. + rt2800_rfcsr_write_chanreg(rt2x00dev, 48, 0xFF);
  2025. +- rt2800_rfcsr_write_chanreg(rt2x00dev, 54, 0x20);
  2026. ++ rt2800_rfcsr_write_bank(rt2x00dev, 4, 54, 0x27);
  2027. ++ rt2800_rfcsr_write_bank(rt2x00dev, 6, 54, 0x20);
  2028. + rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x66);
  2029. + rt2800_rfcsr_write_chanreg(rt2x00dev, 56, 0xFF);
  2030. + rt2800_rfcsr_write_chanreg(rt2x00dev, 57, 0x1C);
  2031. diff --git a/package/kernel/mac80211/patches/021-01-rt2800-fix-LNA-gain-assignment-for-MT7620.patch b/package/kernel/mac80211/patches/021-01-rt2800-fix-LNA-gain-assignment-for-MT7620.patch
  2032. deleted file mode 100644
  2033. index 3270ea2c566850e04b5484de41e462ebafa3cfcc..0000000000000000000000000000000000000000
  2034. --- a/package/kernel/mac80211/patches/021-01-rt2800-fix-LNA-gain-assignment-for-MT7620.patch
  2035. +++ /dev/null
  2036. @@ -1,54 +0,0 @@
  2037. -From 0109238d62a99ea779a7e28e21868118e7b8d69d Mon Sep 17 00:00:00 2001
  2038. -From: Daniel Golle <daniel@makrotopia.org>
  2039. -Date: Mon, 10 Apr 2017 14:28:14 +0200
  2040. -Subject: [PATCH 1/2] rt2800: fix LNA gain assignment for MT7620
  2041. -To: Stanislaw Gruszka <sgruszka@redhat.com>
  2042. -Cc: Helmut Schaa <helmut.schaa@googlemail.com>,
  2043. - linux-wireless@vger.kernel.org,
  2044. - Kalle Valo <kvalo@codeaurora.org>
  2045. -
  2046. -The base value used for MT7620 differs from Rt5392 which resulted in
  2047. -quite bad RX signal quality. Fix this by using the correct base value as
  2048. -well as the LNA calibration values for HT20.
  2049. -
  2050. -Reported-by: Tom Psyborg <pozega.tomislav@gmail.com>
  2051. -Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  2052. ----
  2053. - drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 18 ++++++++++++++++--
  2054. - 1 file changed, 16 insertions(+), 2 deletions(-)
  2055. -
  2056. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  2057. -index ba06ac2d876d..7135519a638c 100644
  2058. ---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  2059. -+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  2060. -@@ -3806,11 +3806,25 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
  2061. - }
  2062. -
  2063. - if (rt2x00_rt(rt2x00dev, RT5592) || rt2x00_rt(rt2x00dev, RT6352)) {
  2064. -+ reg = 0x10;
  2065. -+ if (!conf_is_ht40(conf)) {
  2066. -+ if (rt2x00_rt(rt2x00dev, RT6352) &&
  2067. -+ rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
  2068. -+ reg |= 0x5;
  2069. -+ } else {
  2070. -+ reg |= 0xa;
  2071. -+ }
  2072. -+ }
  2073. - rt2800_bbp_write(rt2x00dev, 195, 141);
  2074. -- rt2800_bbp_write(rt2x00dev, 196, conf_is_ht40(conf) ? 0x10 : 0x1a);
  2075. -+ rt2800_bbp_write(rt2x00dev, 196, reg);
  2076. -
  2077. - /* AGC init */
  2078. -- reg = (rf->channel <= 14 ? 0x1c : 0x24) + 2 * rt2x00dev->lna_gain;
  2079. -+ if (rt2x00_rt(rt2x00dev, RT6352))
  2080. -+ reg = 0x04;
  2081. -+ else
  2082. -+ reg = rf->channel <= 14 ? 0x1c : 0x24;
  2083. -+
  2084. -+ reg += 2 * rt2x00dev->lna_gain;
  2085. - rt2800_bbp_write_with_rx_chain(rt2x00dev, 66, reg);
  2086. -
  2087. - rt2800_iq_calibrate(rt2x00dev, rf->channel);
  2088. ---
  2089. -2.12.2
  2090. -
  2091. diff --git a/package/kernel/mac80211/patches/021-02-rt2800-do-VCO-calibration-after-programming-ALC.patch b/package/kernel/mac80211/patches/021-02-rt2800-do-VCO-calibration-after-programming-ALC.patch
  2092. deleted file mode 100644
  2093. index 1dafb78f1c71037d7362c13f68728b11dc5aaff2..0000000000000000000000000000000000000000
  2094. --- a/package/kernel/mac80211/patches/021-02-rt2800-do-VCO-calibration-after-programming-ALC.patch
  2095. +++ /dev/null
  2096. @@ -1,34 +0,0 @@
  2097. -From feb608c7986c14bab153f31f8e96f251072e6578 Mon Sep 17 00:00:00 2001
  2098. -From: Daniel Golle <daniel@makrotopia.org>
  2099. -Date: Mon, 10 Apr 2017 15:33:20 +0200
  2100. -Subject: [PATCH 2/2] rt2800: do VCO calibration after programming ALC
  2101. -To: Stanislaw Gruszka <sgruszka@redhat.com>
  2102. -Cc: Helmut Schaa <helmut.schaa@googlemail.com>,
  2103. - linux-wireless@vger.kernel.org,
  2104. - Kalle Valo <kvalo@codeaurora.org>
  2105. -
  2106. -Scanning fails if we don't do VCO calibration every time.
  2107. -The vendor driver duplicates the VCO calibration function into the
  2108. -channel switching logic, we can do the same with less duplication.
  2109. -
  2110. -Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  2111. ----
  2112. - drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 2 ++
  2113. - 1 file changed, 2 insertions(+)
  2114. -
  2115. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  2116. -index 7135519a638c..870bf315f98b 100644
  2117. ---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  2118. -+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  2119. -@@ -3407,6 +3407,8 @@ static void rt2800_config_alc(struct rt2x00_dev *rt2x00dev,
  2120. - rt2800_rfcsr_write(rt2x00dev, 42, 0x5b);
  2121. - }
  2122. - rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, mac_sys_ctrl);
  2123. -+
  2124. -+ rt2800_vco_calibration(rt2x00dev);
  2125. - }
  2126. -
  2127. - static void rt2800_bbp_write_with_rx_chain(struct rt2x00_dev *rt2x00dev,
  2128. ---
  2129. -2.12.2
  2130. -
  2131. diff --git a/package/kernel/mac80211/patches/021-03-rt2800-fix-mt7620-vco-calibration-registers.patch b/package/kernel/mac80211/patches/021-03-rt2800-fix-mt7620-vco-calibration-registers.patch
  2132. deleted file mode 100644
  2133. index 708b0b2d31a0276aa9dd3a922e26a1379ec364f4..0000000000000000000000000000000000000000
  2134. --- a/package/kernel/mac80211/patches/021-03-rt2800-fix-mt7620-vco-calibration-registers.patch
  2135. +++ /dev/null
  2136. @@ -1,50 +0,0 @@
  2137. -From 02c452f317b4a4d06c433c294e66896a389731c1 Mon Sep 17 00:00:00 2001
  2138. -From: Daniel Golle <daniel@makrotopia.org>
  2139. -Date: Tue, 18 Apr 2017 11:09:53 +0200
  2140. -Subject: [PATCH] rt2800: fix mt7620 vco calibration registers
  2141. -MIME-Version: 1.0
  2142. -Content-Type: text/plain; charset=UTF-8
  2143. -Content-Transfer-Encoding: 8bit
  2144. -To: Stanislaw Gruszka <sgruszka@redhat.com>
  2145. -Cc: Helmut Schaa <helmut.schaa@googlemail.com>,
  2146. - linux-wireless@vger.kernel.org,
  2147. - Kalle Valo <kvalo@codeaurora.org>,
  2148. - Tom Psyborg <pozega.tomislav@gmail.com>
  2149. -
  2150. -Use register values from init LNA function instead of the ones from
  2151. -restore LNA function. Apply register values based on rx path
  2152. -configuration.
  2153. -
  2154. -Signed-off-by: Tomislav Požega <pozega.tomislav@gmail.com>
  2155. -Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  2156. ----
  2157. - drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 6 +++---
  2158. - 1 file changed, 3 insertions(+), 3 deletions(-)
  2159. -
  2160. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  2161. -index 870bf315f98b..86cffee6876a 100644
  2162. ---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  2163. -+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  2164. -@@ -4932,7 +4932,7 @@ void rt2800_vco_calibration(struct rt2x00_dev *rt2x00dev)
  2165. - rt2800_register_write(rt2x00dev, TX_PIN_CFG, tx_pin);
  2166. -
  2167. - if (rt2x00_rt(rt2x00dev, RT6352)) {
  2168. -- if (rt2x00dev->default_ant.tx_chain_num == 1) {
  2169. -+ if (rt2x00dev->default_ant.rx_chain_num == 1) {
  2170. - rt2800_bbp_write(rt2x00dev, 91, 0x07);
  2171. - rt2800_bbp_write(rt2x00dev, 95, 0x1A);
  2172. - rt2800_bbp_write(rt2x00dev, 195, 128);
  2173. -@@ -4953,8 +4953,8 @@ void rt2800_vco_calibration(struct rt2x00_dev *rt2x00dev)
  2174. - }
  2175. -
  2176. - if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
  2177. -- rt2800_bbp_write(rt2x00dev, 75, 0x60);
  2178. -- rt2800_bbp_write(rt2x00dev, 76, 0x44);
  2179. -+ rt2800_bbp_write(rt2x00dev, 75, 0x68);
  2180. -+ rt2800_bbp_write(rt2x00dev, 76, 0x4C);
  2181. - rt2800_bbp_write(rt2x00dev, 79, 0x1C);
  2182. - rt2800_bbp_write(rt2x00dev, 80, 0x0C);
  2183. - rt2800_bbp_write(rt2x00dev, 82, 0xB6);
  2184. ---
  2185. -2.12.2
  2186. -
  2187. diff --git a/package/kernel/mac80211/patches/021-04-rt2800-fix-mt7620-E2-channel-registers.patch b/package/kernel/mac80211/patches/021-04-rt2800-fix-mt7620-E2-channel-registers.patch
  2188. deleted file mode 100644
  2189. index 284a347f256f3499222acff54ebf9df0fa5aecf9..0000000000000000000000000000000000000000
  2190. --- a/package/kernel/mac80211/patches/021-04-rt2800-fix-mt7620-E2-channel-registers.patch
  2191. +++ /dev/null
  2192. @@ -1,41 +0,0 @@
  2193. -From c426cb0ed15ee12dfdc8c53ddd1449ac617023cf Mon Sep 17 00:00:00 2001
  2194. -From: Daniel Golle <daniel@makrotopia.org>
  2195. -Date: Tue, 18 Apr 2017 11:45:37 +0200
  2196. -Subject: [PATCH] rt2800: fix mt7620 E2 channel registers
  2197. -To: Stanislaw Gruszka <sgruszka@redhat.com>
  2198. -Cc: Helmut Schaa <helmut.schaa@googlemail.com>,
  2199. - linux-wireless@vger.kernel.org,
  2200. - Kalle Valo <kvalo@codeaurora.org>,
  2201. - Tom Psyborg <pozega.tomislav@gmail.com>
  2202. -
  2203. -From: Tomislav Požega <pozega.tomislav@gmail.com>
  2204. -
  2205. -update RF register 47 and 54 values according to vendor driver
  2206. -
  2207. -Signed-off-by: Tomislav Požega <pozega.tomislav@gmail.com>
  2208. -Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  2209. ----
  2210. - drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 6 ++++--
  2211. - 1 file changed, 4 insertions(+), 2 deletions(-)
  2212. -
  2213. -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  2214. -index 86cffee6876a..8585cdc3de53 100644
  2215. ---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  2216. -+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  2217. -@@ -8145,9 +8145,11 @@ static void rt2800_init_rfcsr_6352(struct rt2x00_dev *rt2x00dev)
  2218. - rt2800_rfcsr_write_chanreg(rt2x00dev, 44, 0xB3);
  2219. - rt2800_rfcsr_write_chanreg(rt2x00dev, 45, 0xD5);
  2220. - rt2800_rfcsr_write_chanreg(rt2x00dev, 46, 0x27);
  2221. -- rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x69);
  2222. -+ rt2800_rfcsr_write_bank(rt2x00dev, 4, 47, 0x67);
  2223. -+ rt2800_rfcsr_write_bank(rt2x00dev, 6, 47, 0x69);
  2224. - rt2800_rfcsr_write_chanreg(rt2x00dev, 48, 0xFF);
  2225. -- rt2800_rfcsr_write_chanreg(rt2x00dev, 54, 0x20);
  2226. -+ rt2800_rfcsr_write_bank(rt2x00dev, 4, 54, 0x27);
  2227. -+ rt2800_rfcsr_write_bank(rt2x00dev, 6, 54, 0x20);
  2228. - rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x66);
  2229. - rt2800_rfcsr_write_chanreg(rt2x00dev, 56, 0xFF);
  2230. - rt2800_rfcsr_write_chanreg(rt2x00dev, 57, 0x1C);
  2231. ---
  2232. -2.12.2
  2233. -
  2234. diff --git a/package/kernel/mac80211/patches/323-0001-brcmfmac-Use-net_device_stats-from-struct-net_device.patch b/package/kernel/mac80211/patches/323-0001-brcmfmac-Use-net_device_stats-from-struct-net_device.patch
  2235. new file mode 100644
  2236. index 0000000000000000000000000000000000000000..81567d87579aa6870b0862758acc692852cd369e
  2237. --- /dev/null
  2238. +++ b/package/kernel/mac80211/patches/323-0001-brcmfmac-Use-net_device_stats-from-struct-net_device.patch
  2239. @@ -0,0 +1,112 @@
  2240. +From 91b632803ee4e47c5a5c4dc3d8bf5abf9c16107a Mon Sep 17 00:00:00 2001
  2241. +From: Tobias Klauser <tklauser@distanz.ch>
  2242. +Date: Mon, 13 Feb 2017 11:14:09 +0100
  2243. +Subject: [PATCH] brcmfmac: Use net_device_stats from struct net_device
  2244. +
  2245. +Instead of using a private copy of struct net_device_stats in struct
  2246. +brcm_if, use stats from struct net_device. Also remove the now
  2247. +unnecessary .ndo_get_stats function.
  2248. +
  2249. +Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
  2250. +Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
  2251. +Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  2252. +---
  2253. + .../wireless/broadcom/brcm80211/brcmfmac/core.c | 26 +++++++---------------
  2254. + .../wireless/broadcom/brcm80211/brcmfmac/core.h | 2 --
  2255. + 2 files changed, 8 insertions(+), 20 deletions(-)
  2256. +
  2257. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
  2258. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
  2259. +@@ -249,10 +249,10 @@ static netdev_tx_t brcmf_netdev_start_xm
  2260. +
  2261. + done:
  2262. + if (ret) {
  2263. +- ifp->stats.tx_dropped++;
  2264. ++ ndev->stats.tx_dropped++;
  2265. + } else {
  2266. +- ifp->stats.tx_packets++;
  2267. +- ifp->stats.tx_bytes += skb->len;
  2268. ++ ndev->stats.tx_packets++;
  2269. ++ ndev->stats.tx_bytes += skb->len;
  2270. + }
  2271. +
  2272. + /* Return ok: we always eat the packet */
  2273. +@@ -296,15 +296,15 @@ void brcmf_txflowblock(struct device *de
  2274. + void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb)
  2275. + {
  2276. + if (skb->pkt_type == PACKET_MULTICAST)
  2277. +- ifp->stats.multicast++;
  2278. ++ ifp->ndev->stats.multicast++;
  2279. +
  2280. + if (!(ifp->ndev->flags & IFF_UP)) {
  2281. + brcmu_pkt_buf_free_skb(skb);
  2282. + return;
  2283. + }
  2284. +
  2285. +- ifp->stats.rx_bytes += skb->len;
  2286. +- ifp->stats.rx_packets++;
  2287. ++ ifp->ndev->stats.rx_bytes += skb->len;
  2288. ++ ifp->ndev->stats.rx_packets++;
  2289. +
  2290. + brcmf_dbg(DATA, "rx proto=0x%X\n", ntohs(skb->protocol));
  2291. + if (in_interrupt())
  2292. +@@ -327,7 +327,7 @@ static int brcmf_rx_hdrpull(struct brcmf
  2293. +
  2294. + if (ret || !(*ifp) || !(*ifp)->ndev) {
  2295. + if (ret != -ENODATA && *ifp)
  2296. +- (*ifp)->stats.rx_errors++;
  2297. ++ (*ifp)->ndev->stats.rx_errors++;
  2298. + brcmu_pkt_buf_free_skb(skb);
  2299. + return -ENODATA;
  2300. + }
  2301. +@@ -388,7 +388,7 @@ void brcmf_txfinalize(struct brcmf_if *i
  2302. + }
  2303. +
  2304. + if (!success)
  2305. +- ifp->stats.tx_errors++;
  2306. ++ ifp->ndev->stats.tx_errors++;
  2307. +
  2308. + brcmu_pkt_buf_free_skb(txp);
  2309. + }
  2310. +@@ -411,15 +411,6 @@ void brcmf_txcomplete(struct device *dev
  2311. + }
  2312. + }
  2313. +
  2314. +-static struct net_device_stats *brcmf_netdev_get_stats(struct net_device *ndev)
  2315. +-{
  2316. +- struct brcmf_if *ifp = netdev_priv(ndev);
  2317. +-
  2318. +- brcmf_dbg(TRACE, "Enter, bsscfgidx=%d\n", ifp->bsscfgidx);
  2319. +-
  2320. +- return &ifp->stats;
  2321. +-}
  2322. +-
  2323. + static void brcmf_ethtool_get_drvinfo(struct net_device *ndev,
  2324. + struct ethtool_drvinfo *info)
  2325. + {
  2326. +@@ -492,7 +483,6 @@ static int brcmf_netdev_open(struct net_
  2327. + static const struct net_device_ops brcmf_netdev_ops_pri = {
  2328. + .ndo_open = brcmf_netdev_open,
  2329. + .ndo_stop = brcmf_netdev_stop,
  2330. +- .ndo_get_stats = brcmf_netdev_get_stats,
  2331. + .ndo_start_xmit = brcmf_netdev_start_xmit,
  2332. + .ndo_set_mac_address = brcmf_netdev_set_mac_address,
  2333. + .ndo_set_rx_mode = brcmf_netdev_set_multicast_list
  2334. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
  2335. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
  2336. +@@ -171,7 +171,6 @@ enum brcmf_netif_stop_reason {
  2337. + * @drvr: points to device related information.
  2338. + * @vif: points to cfg80211 specific interface information.
  2339. + * @ndev: associated network device.
  2340. +- * @stats: interface specific network statistics.
  2341. + * @multicast_work: worker object for multicast provisioning.
  2342. + * @ndoffload_work: worker object for neighbor discovery offload configuration.
  2343. + * @fws_desc: interface specific firmware-signalling descriptor.
  2344. +@@ -187,7 +186,6 @@ struct brcmf_if {
  2345. + struct brcmf_pub *drvr;
  2346. + struct brcmf_cfg80211_vif *vif;
  2347. + struct net_device *ndev;
  2348. +- struct net_device_stats stats;
  2349. + struct work_struct multicast_work;
  2350. + struct work_struct ndoffload_work;
  2351. + struct brcmf_fws_mac_descriptor *fws_desc;
  2352. diff --git a/package/kernel/mac80211/patches/323-0002-brcmfmac-always-print-error-when-PSM-s-watchdog-fire.patch b/package/kernel/mac80211/patches/323-0002-brcmfmac-always-print-error-when-PSM-s-watchdog-fire.patch
  2353. new file mode 100644
  2354. index 0000000000000000000000000000000000000000..7272b889c0bb829db55faaf32524c5762ddc4efd
  2355. --- /dev/null
  2356. +++ b/package/kernel/mac80211/patches/323-0002-brcmfmac-always-print-error-when-PSM-s-watchdog-fire.patch
  2357. @@ -0,0 +1,148 @@
  2358. +From f1ac3aa212af6dd0a36dc07a63f95f91be6f4935 Mon Sep 17 00:00:00 2001
  2359. +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
  2360. +Date: Fri, 24 Feb 2017 17:32:46 +0100
  2361. +Subject: [PATCH] brcmfmac: always print error when PSM's watchdog fires
  2362. +MIME-Version: 1.0
  2363. +Content-Type: text/plain; charset=UTF-8
  2364. +Content-Transfer-Encoding: 8bit
  2365. +
  2366. +So far we were attaching BRCMF_E_PSM_WATCHDOG event listener in
  2367. +brcmf_debug_attach which gets compiled only with CONFIG_BRCMDBG. This
  2368. +event means something went wrong and firmware / hardware usually can't
  2369. +be expected to work (reliably).
  2370. +
  2371. +Such a problem is significant for user experience so I believe we should
  2372. +print an error unconditionally (even with debugging disabled). What can
  2373. +be indeed optional is dumping bus memory as this is clearly part of
  2374. +debugging process.
  2375. +
  2376. +In the future we may also try to extend this listener by trying to
  2377. +recover from the error or at least signal it to the cfg80211.
  2378. +
  2379. +Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
  2380. +Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  2381. +---
  2382. + .../wireless/broadcom/brcm80211/brcmfmac/core.c | 22 ++++++++++++++++++
  2383. + .../wireless/broadcom/brcm80211/brcmfmac/debug.c | 26 +++-------------------
  2384. + .../wireless/broadcom/brcm80211/brcmfmac/debug.h | 9 ++++++++
  2385. + 3 files changed, 34 insertions(+), 23 deletions(-)
  2386. +
  2387. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
  2388. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
  2389. +@@ -738,6 +738,24 @@ void brcmf_remove_interface(struct brcmf
  2390. + brcmf_del_if(ifp->drvr, ifp->bsscfgidx, rtnl_locked);
  2391. + }
  2392. +
  2393. ++static int brcmf_psm_watchdog_notify(struct brcmf_if *ifp,
  2394. ++ const struct brcmf_event_msg *evtmsg,
  2395. ++ void *data)
  2396. ++{
  2397. ++ int err;
  2398. ++
  2399. ++ brcmf_dbg(TRACE, "enter: bsscfgidx=%d\n", ifp->bsscfgidx);
  2400. ++
  2401. ++ brcmf_err("PSM's watchdog has fired!\n");
  2402. ++
  2403. ++ err = brcmf_debug_create_memdump(ifp->drvr->bus_if, data,
  2404. ++ evtmsg->datalen);
  2405. ++ if (err)
  2406. ++ brcmf_err("Failed to get memory dump, %d\n", err);
  2407. ++
  2408. ++ return err;
  2409. ++}
  2410. ++
  2411. + #ifdef CONFIG_INET
  2412. + #define ARPOL_MAX_ENTRIES 8
  2413. + static int brcmf_inetaddr_changed(struct notifier_block *nb,
  2414. +@@ -917,6 +935,10 @@ int brcmf_attach(struct device *dev, str
  2415. + goto fail;
  2416. + }
  2417. +
  2418. ++ /* Attach to events important for core code */
  2419. ++ brcmf_fweh_register(drvr, BRCMF_E_PSM_WATCHDOG,
  2420. ++ brcmf_psm_watchdog_notify);
  2421. ++
  2422. + /* attach firmware event handler */
  2423. + brcmf_fweh_attach(drvr);
  2424. +
  2425. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c
  2426. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c
  2427. +@@ -27,8 +27,8 @@
  2428. +
  2429. + static struct dentry *root_folder;
  2430. +
  2431. +-static int brcmf_debug_create_memdump(struct brcmf_bus *bus, const void *data,
  2432. +- size_t len)
  2433. ++int brcmf_debug_create_memdump(struct brcmf_bus *bus, const void *data,
  2434. ++ size_t len)
  2435. + {
  2436. + void *dump;
  2437. + size_t ramsize;
  2438. +@@ -54,24 +54,6 @@ static int brcmf_debug_create_memdump(st
  2439. + return 0;
  2440. + }
  2441. +
  2442. +-static int brcmf_debug_psm_watchdog_notify(struct brcmf_if *ifp,
  2443. +- const struct brcmf_event_msg *evtmsg,
  2444. +- void *data)
  2445. +-{
  2446. +- int err;
  2447. +-
  2448. +- brcmf_dbg(TRACE, "enter: bsscfgidx=%d\n", ifp->bsscfgidx);
  2449. +-
  2450. +- brcmf_err("PSM's watchdog has fired!\n");
  2451. +-
  2452. +- err = brcmf_debug_create_memdump(ifp->drvr->bus_if, data,
  2453. +- evtmsg->datalen);
  2454. +- if (err)
  2455. +- brcmf_err("Failed to get memory dump, %d\n", err);
  2456. +-
  2457. +- return err;
  2458. +-}
  2459. +-
  2460. + void brcmf_debugfs_init(void)
  2461. + {
  2462. + root_folder = debugfs_create_dir(KBUILD_MODNAME, NULL);
  2463. +@@ -99,9 +81,7 @@ int brcmf_debug_attach(struct brcmf_pub
  2464. + if (IS_ERR(drvr->dbgfs_dir))
  2465. + return PTR_ERR(drvr->dbgfs_dir);
  2466. +
  2467. +-
  2468. +- return brcmf_fweh_register(drvr, BRCMF_E_PSM_WATCHDOG,
  2469. +- brcmf_debug_psm_watchdog_notify);
  2470. ++ return 0;
  2471. + }
  2472. +
  2473. + void brcmf_debug_detach(struct brcmf_pub *drvr)
  2474. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
  2475. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
  2476. +@@ -99,6 +99,7 @@ do { \
  2477. +
  2478. + extern int brcmf_msg_level;
  2479. +
  2480. ++struct brcmf_bus;
  2481. + struct brcmf_pub;
  2482. + #ifdef DEBUG
  2483. + void brcmf_debugfs_init(void);
  2484. +@@ -108,6 +109,8 @@ void brcmf_debug_detach(struct brcmf_pub
  2485. + struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr);
  2486. + int brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn,
  2487. + int (*read_fn)(struct seq_file *seq, void *data));
  2488. ++int brcmf_debug_create_memdump(struct brcmf_bus *bus, const void *data,
  2489. ++ size_t len);
  2490. + #else
  2491. + static inline void brcmf_debugfs_init(void)
  2492. + {
  2493. +@@ -128,6 +131,12 @@ int brcmf_debugfs_add_entry(struct brcmf
  2494. + {
  2495. + return 0;
  2496. + }
  2497. ++static inline
  2498. ++int brcmf_debug_create_memdump(struct brcmf_bus *bus, const void *data,
  2499. ++ size_t len)
  2500. ++{
  2501. ++ return 0;
  2502. ++}
  2503. + #endif
  2504. +
  2505. + #endif /* BRCMFMAC_DEBUG_H */
  2506. diff --git a/package/kernel/mac80211/patches/323-0003-brcmfmac-Do-not-print-the-firmware-version-as-an-err.patch b/package/kernel/mac80211/patches/323-0003-brcmfmac-Do-not-print-the-firmware-version-as-an-err.patch
  2507. new file mode 100644
  2508. index 0000000000000000000000000000000000000000..3ab9b66e088edc980b4ca9565ecad2ead7bcc679
  2509. --- /dev/null
  2510. +++ b/package/kernel/mac80211/patches/323-0003-brcmfmac-Do-not-print-the-firmware-version-as-an-err.patch
  2511. @@ -0,0 +1,56 @@
  2512. +From d79fe4cb70d8deab7b8dc1de547ed4b915574414 Mon Sep 17 00:00:00 2001
  2513. +From: Hans de Goede <hdegoede@redhat.com>
  2514. +Date: Wed, 8 Mar 2017 14:50:15 +0100
  2515. +Subject: [PATCH] brcmfmac: Do not print the firmware version as an error
  2516. +
  2517. +Using pr_err for things which are not errors is a bad idea. E.g. it
  2518. +will cause the plymouth bootsplash screen to drop back to the text
  2519. +console so that the user can see the error, which is not what we
  2520. +normally want to happen.
  2521. +
  2522. +Instead add a new brcmf_info macro and use that.
  2523. +
  2524. +Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  2525. +Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
  2526. +Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  2527. +---
  2528. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c | 2 +-
  2529. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h | 9 +++++++++
  2530. + 2 files changed, 10 insertions(+), 1 deletion(-)
  2531. +
  2532. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
  2533. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
  2534. +@@ -161,7 +161,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
  2535. + strsep(&ptr, "\n");
  2536. +
  2537. + /* Print fw version info */
  2538. +- brcmf_err("Firmware version = %s\n", buf);
  2539. ++ brcmf_info("Firmware version = %s\n", buf);
  2540. +
  2541. + /* locate firmware version number for ethtool */
  2542. + ptr = strrchr(buf, ' ') + 1;
  2543. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
  2544. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
  2545. +@@ -59,6 +59,10 @@ void __brcmf_err(const char *func, const
  2546. + } while (0)
  2547. +
  2548. + #if defined(DEBUG) || defined(CPTCFG_BRCM_TRACING)
  2549. ++
  2550. ++/* For debug/tracing purposes treat info messages as errors */
  2551. ++#define brcmf_info brcmf_err
  2552. ++
  2553. + __printf(3, 4)
  2554. + void __brcmf_dbg(u32 level, const char *func, const char *fmt, ...);
  2555. + #define brcmf_dbg(level, fmt, ...) \
  2556. +@@ -77,6 +81,11 @@ do { \
  2557. +
  2558. + #else /* defined(DEBUG) || defined(CPTCFG_BRCM_TRACING) */
  2559. +
  2560. ++#define brcmf_info(fmt, ...) \
  2561. ++ do { \
  2562. ++ pr_info("%s: " fmt, __func__, ##__VA_ARGS__); \
  2563. ++ } while (0)
  2564. ++
  2565. + #define brcmf_dbg(level, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
  2566. +
  2567. + #define BRCMF_DATA_ON() 0
  2568. diff --git a/package/kernel/mac80211/patches/323-0004-brcmfmac-Do-not-complain-about-country-code-00.patch b/package/kernel/mac80211/patches/323-0004-brcmfmac-Do-not-complain-about-country-code-00.patch
  2569. new file mode 100644
  2570. index 0000000000000000000000000000000000000000..f4570e71b1177abb92965d099b0dfd67f35b703f
  2571. --- /dev/null
  2572. +++ b/package/kernel/mac80211/patches/323-0004-brcmfmac-Do-not-complain-about-country-code-00.patch
  2573. @@ -0,0 +1,28 @@
  2574. +From 26e537884a8ef451f5c60f6949b1615069931ffa Mon Sep 17 00:00:00 2001
  2575. +From: Hans de Goede <hdegoede@redhat.com>
  2576. +Date: Wed, 8 Mar 2017 14:50:16 +0100
  2577. +Subject: [PATCH] brcmfmac: Do not complain about country code "00"
  2578. +
  2579. +The country code gets set to "00" by default at boot, ignore this
  2580. +rather then logging an error about it.
  2581. +
  2582. +Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  2583. +Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
  2584. +Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  2585. +---
  2586. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 4 ++++
  2587. + 1 file changed, 4 insertions(+)
  2588. +
  2589. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
  2590. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
  2591. +@@ -6736,6 +6736,10 @@ static void brcmf_cfg80211_reg_notifier(
  2592. + s32 err;
  2593. + int i;
  2594. +
  2595. ++ /* The country code gets set to "00" by default at boot, ignore */
  2596. ++ if (req->alpha2[0] == '0' && req->alpha2[1] == '0')
  2597. ++ return;
  2598. ++
  2599. + /* ignore non-ISO3166 country codes */
  2600. + for (i = 0; i < sizeof(req->alpha2); i++)
  2601. + if (req->alpha2[i] < 'A' || req->alpha2[i] > 'Z') {
  2602. diff --git a/package/kernel/mac80211/patches/323-0005-brcmfmac-Handle-status-BRCMF_E_STATUS_ABORT-in-cfg80.patch b/package/kernel/mac80211/patches/323-0005-brcmfmac-Handle-status-BRCMF_E_STATUS_ABORT-in-cfg80.patch
  2603. new file mode 100644
  2604. index 0000000000000000000000000000000000000000..0f2d54e1dd1308db876723aee4dc762a5f2e675c
  2605. --- /dev/null
  2606. +++ b/package/kernel/mac80211/patches/323-0005-brcmfmac-Handle-status-BRCMF_E_STATUS_ABORT-in-cfg80.patch
  2607. @@ -0,0 +1,35 @@
  2608. +From b9472a2e3e452c414634b3ccb1ef6c4098878686 Mon Sep 17 00:00:00 2001
  2609. +From: Hans de Goede <hdegoede@redhat.com>
  2610. +Date: Wed, 8 Mar 2017 14:50:17 +0100
  2611. +Subject: [PATCH] brcmfmac: Handle status == BRCMF_E_STATUS_ABORT in
  2612. + cfg80211_escan_handler
  2613. +
  2614. +If a scan gets aborted BRCMF_SCAN_STATUS_BUSY gets cleared in
  2615. +cfg->scan_status and when we receive an abort event from the firmware
  2616. +the BRCMF_SCAN_STATUS_BUSY check in the cfg80211_escan_handler will
  2617. +trigger resulting in multiple errors getting logged.
  2618. +
  2619. +Check for a status of BRCMF_E_STATUS_ABORT and in this case simply
  2620. +cleanly exit the cfg80211_escan_handler. This also avoids a
  2621. +BRCMF_E_STATUS_ABORT event arriving after a new scan has been started
  2622. +causing the new scan to complete prematurely without any data.
  2623. +
  2624. +Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  2625. +Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
  2626. +Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  2627. +---
  2628. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 3 +++
  2629. + 1 file changed, 3 insertions(+)
  2630. +
  2631. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
  2632. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
  2633. +@@ -3097,6 +3097,9 @@ brcmf_cfg80211_escan_handler(struct brcm
  2634. +
  2635. + status = e->status;
  2636. +
  2637. ++ if (status == BRCMF_E_STATUS_ABORT)
  2638. ++ goto exit;
  2639. ++
  2640. + if (!test_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status)) {
  2641. + brcmf_err("scan not ready, bsscfgidx=%d\n", ifp->bsscfgidx);
  2642. + return -EPERM;
  2643. diff --git a/package/kernel/mac80211/patches/323-0006-brcmfmac-move-brcmf_txflowblock-to-bcdc-layer.patch b/package/kernel/mac80211/patches/323-0006-brcmfmac-move-brcmf_txflowblock-to-bcdc-layer.patch
  2644. new file mode 100644
  2645. index 0000000000000000000000000000000000000000..b947cd1de91f67084e6978d8f53022544fa2f737
  2646. --- /dev/null
  2647. +++ b/package/kernel/mac80211/patches/323-0006-brcmfmac-move-brcmf_txflowblock-to-bcdc-layer.patch
  2648. @@ -0,0 +1,137 @@
  2649. +From 20ec4f57498f8770c7a1a3e2a316fa752a424178 Mon Sep 17 00:00:00 2001
  2650. +From: Franky Lin <franky.lin@broadcom.com>
  2651. +Date: Fri, 10 Mar 2017 21:17:02 +0000
  2652. +Subject: [PATCH] brcmfmac: move brcmf_txflowblock to bcdc layer
  2653. +
  2654. +brcmf_txflowblock is invoked by sdio and usb bus module which are using
  2655. +bcdc protocol. This patch makes it a bcdc API instead of a core module
  2656. +function.
  2657. +
  2658. +Reviewed-by: Arend Van Spriel <arend.vanspriel@broadcom.com>
  2659. +Signed-off-by: Franky Lin <franky.lin@broadcom.com>
  2660. +Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
  2661. +Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  2662. +---
  2663. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 10 ++++++++++
  2664. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h | 1 +
  2665. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h | 2 --
  2666. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 10 ----------
  2667. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 5 +++--
  2668. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 5 +++--
  2669. + 6 files changed, 17 insertions(+), 16 deletions(-)
  2670. +
  2671. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
  2672. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
  2673. +@@ -345,6 +345,16 @@ brcmf_proto_bcdc_txdata(struct brcmf_pub
  2674. + return brcmf_bus_txdata(drvr->bus_if, pktbuf);
  2675. + }
  2676. +
  2677. ++void brcmf_proto_bcdc_txflowblock(struct device *dev, bool state)
  2678. ++{
  2679. ++ struct brcmf_bus *bus_if = dev_get_drvdata(dev);
  2680. ++ struct brcmf_pub *drvr = bus_if->drvr;
  2681. ++
  2682. ++ brcmf_dbg(TRACE, "Enter\n");
  2683. ++
  2684. ++ brcmf_fws_bus_blocked(drvr, state);
  2685. ++}
  2686. ++
  2687. + static void
  2688. + brcmf_proto_bcdc_configure_addr_mode(struct brcmf_pub *drvr, int ifidx,
  2689. + enum proto_addr_mode addr_mode)
  2690. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h
  2691. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h
  2692. +@@ -19,6 +19,7 @@
  2693. + #ifdef CPTCFG_BRCMFMAC_PROTO_BCDC
  2694. + int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr);
  2695. + void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr);
  2696. ++void brcmf_proto_bcdc_txflowblock(struct device *dev, bool state);
  2697. + #else
  2698. + static inline int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr) { return 0; }
  2699. + static inline void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr) {}
  2700. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
  2701. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
  2702. +@@ -229,8 +229,6 @@ int brcmf_attach(struct device *dev, str
  2703. + void brcmf_detach(struct device *dev);
  2704. + /* Indication from bus module that dongle should be reset */
  2705. + void brcmf_dev_reset(struct device *dev);
  2706. +-/* Indication from bus module to change flow-control state */
  2707. +-void brcmf_txflowblock(struct device *dev, bool state);
  2708. +
  2709. + /* Notify the bus has transferred the tx packet to firmware */
  2710. + void brcmf_txcomplete(struct device *dev, struct sk_buff *txp, bool success);
  2711. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
  2712. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
  2713. +@@ -283,16 +283,6 @@ void brcmf_txflowblock_if(struct brcmf_i
  2714. + spin_unlock_irqrestore(&ifp->netif_stop_lock, flags);
  2715. + }
  2716. +
  2717. +-void brcmf_txflowblock(struct device *dev, bool state)
  2718. +-{
  2719. +- struct brcmf_bus *bus_if = dev_get_drvdata(dev);
  2720. +- struct brcmf_pub *drvr = bus_if->drvr;
  2721. +-
  2722. +- brcmf_dbg(TRACE, "Enter\n");
  2723. +-
  2724. +- brcmf_fws_bus_blocked(drvr, state);
  2725. +-}
  2726. +-
  2727. + void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb)
  2728. + {
  2729. + if (skb->pkt_type == PACKET_MULTICAST)
  2730. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
  2731. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
  2732. +@@ -44,6 +44,7 @@
  2733. + #include "firmware.h"
  2734. + #include "core.h"
  2735. + #include "common.h"
  2736. ++#include "bcdc.h"
  2737. +
  2738. + #define DCMD_RESP_TIMEOUT msecs_to_jiffies(2500)
  2739. + #define CTL_DONE_TIMEOUT msecs_to_jiffies(2500)
  2740. +@@ -2328,7 +2329,7 @@ static uint brcmf_sdio_sendfromq(struct
  2741. + if ((bus->sdiodev->state == BRCMF_SDIOD_DATA) &&
  2742. + bus->txoff && (pktq_len(&bus->txq) < TXLOW)) {
  2743. + bus->txoff = false;
  2744. +- brcmf_txflowblock(bus->sdiodev->dev, false);
  2745. ++ brcmf_proto_bcdc_txflowblock(bus->sdiodev->dev, false);
  2746. + }
  2747. +
  2748. + return cnt;
  2749. +@@ -2753,7 +2754,7 @@ static int brcmf_sdio_bus_txdata(struct
  2750. +
  2751. + if (pktq_len(&bus->txq) >= TXHI) {
  2752. + bus->txoff = true;
  2753. +- brcmf_txflowblock(dev, true);
  2754. ++ brcmf_proto_bcdc_txflowblock(dev, true);
  2755. + }
  2756. + spin_unlock_bh(&bus->txq_lock);
  2757. +
  2758. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
  2759. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
  2760. +@@ -29,6 +29,7 @@
  2761. + #include "usb.h"
  2762. + #include "core.h"
  2763. + #include "common.h"
  2764. ++#include "bcdc.h"
  2765. +
  2766. +
  2767. + #define IOCTL_RESP_TIMEOUT msecs_to_jiffies(2000)
  2768. +@@ -488,7 +489,7 @@ static void brcmf_usb_tx_complete(struct
  2769. + spin_lock_irqsave(&devinfo->tx_flowblock_lock, flags);
  2770. + if (devinfo->tx_freecount > devinfo->tx_high_watermark &&
  2771. + devinfo->tx_flowblock) {
  2772. +- brcmf_txflowblock(devinfo->dev, false);
  2773. ++ brcmf_proto_bcdc_txflowblock(devinfo->dev, false);
  2774. + devinfo->tx_flowblock = false;
  2775. + }
  2776. + spin_unlock_irqrestore(&devinfo->tx_flowblock_lock, flags);
  2777. +@@ -635,7 +636,7 @@ static int brcmf_usb_tx(struct device *d
  2778. + spin_lock_irqsave(&devinfo->tx_flowblock_lock, flags);
  2779. + if (devinfo->tx_freecount < devinfo->tx_low_watermark &&
  2780. + !devinfo->tx_flowblock) {
  2781. +- brcmf_txflowblock(dev, true);
  2782. ++ brcmf_proto_bcdc_txflowblock(dev, true);
  2783. + devinfo->tx_flowblock = true;
  2784. + }
  2785. + spin_unlock_irqrestore(&devinfo->tx_flowblock_lock, flags);
  2786. diff --git a/package/kernel/mac80211/patches/323-0007-brcmfmac-move-brcmf_txcomplete-to-bcdc-layer.patch b/package/kernel/mac80211/patches/323-0007-brcmfmac-move-brcmf_txcomplete-to-bcdc-layer.patch
  2787. new file mode 100644
  2788. index 0000000000000000000000000000000000000000..9614e53e51b24afd48876ea4e0c805583acf472a
  2789. --- /dev/null
  2790. +++ b/package/kernel/mac80211/patches/323-0007-brcmfmac-move-brcmf_txcomplete-to-bcdc-layer.patch
  2791. @@ -0,0 +1,122 @@
  2792. +From 7b584396b7a760bc77bbde4625f83ef173159d3e Mon Sep 17 00:00:00 2001
  2793. +From: Franky Lin <franky.lin@broadcom.com>
  2794. +Date: Fri, 10 Mar 2017 21:17:03 +0000
  2795. +Subject: [PATCH] brcmfmac: move brcmf_txcomplete to bcdc layer
  2796. +
  2797. +brcmf_txcomplete is invoked by sdio and usb bus module which are using
  2798. +bcdc protocol. So move it from core module into bcdc layer.
  2799. +
  2800. +Signed-off-by: Franky Lin <franky.lin@broadcom.com>
  2801. +Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
  2802. +Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  2803. +---
  2804. + .../net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 20 ++++++++++++++++++++
  2805. + .../net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h | 2 ++
  2806. + .../net/wireless/broadcom/brcm80211/brcmfmac/bus.h | 3 ---
  2807. + .../net/wireless/broadcom/brcm80211/brcmfmac/core.c | 18 ------------------
  2808. + .../net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 3 ++-
  2809. + .../net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 2 +-
  2810. + 6 files changed, 25 insertions(+), 23 deletions(-)
  2811. +
  2812. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
  2813. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
  2814. +@@ -355,6 +355,26 @@ void brcmf_proto_bcdc_txflowblock(struct
  2815. + brcmf_fws_bus_blocked(drvr, state);
  2816. + }
  2817. +
  2818. ++void
  2819. ++brcmf_proto_bcdc_txcomplete(struct device *dev, struct sk_buff *txp,
  2820. ++ bool success)
  2821. ++{
  2822. ++ struct brcmf_bus *bus_if = dev_get_drvdata(dev);
  2823. ++ struct brcmf_pub *drvr = bus_if->drvr;
  2824. ++ struct brcmf_if *ifp;
  2825. ++
  2826. ++ /* await txstatus signal for firmware if active */
  2827. ++ if (brcmf_fws_fc_active(drvr->fws)) {
  2828. ++ if (!success)
  2829. ++ brcmf_fws_bustxfail(drvr->fws, txp);
  2830. ++ } else {
  2831. ++ if (brcmf_proto_bcdc_hdrpull(drvr, false, txp, &ifp))
  2832. ++ brcmu_pkt_buf_free_skb(txp);
  2833. ++ else
  2834. ++ brcmf_txfinalize(ifp, txp, success);
  2835. ++ }
  2836. ++}
  2837. ++
  2838. + static void
  2839. + brcmf_proto_bcdc_configure_addr_mode(struct brcmf_pub *drvr, int ifidx,
  2840. + enum proto_addr_mode addr_mode)
  2841. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h
  2842. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h
  2843. +@@ -20,6 +20,8 @@
  2844. + int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr);
  2845. + void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr);
  2846. + void brcmf_proto_bcdc_txflowblock(struct device *dev, bool state);
  2847. ++void brcmf_proto_bcdc_txcomplete(struct device *dev, struct sk_buff *txp,
  2848. ++ bool success);
  2849. + #else
  2850. + static inline int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr) { return 0; }
  2851. + static inline void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr) {}
  2852. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
  2853. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
  2854. +@@ -230,9 +230,6 @@ void brcmf_detach(struct device *dev);
  2855. + /* Indication from bus module that dongle should be reset */
  2856. + void brcmf_dev_reset(struct device *dev);
  2857. +
  2858. +-/* Notify the bus has transferred the tx packet to firmware */
  2859. +-void brcmf_txcomplete(struct device *dev, struct sk_buff *txp, bool success);
  2860. +-
  2861. + /* Configure the "global" bus state used by upper layers */
  2862. + void brcmf_bus_change_state(struct brcmf_bus *bus, enum brcmf_bus_state state);
  2863. +
  2864. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
  2865. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
  2866. +@@ -383,24 +383,6 @@ void brcmf_txfinalize(struct brcmf_if *i
  2867. + brcmu_pkt_buf_free_skb(txp);
  2868. + }
  2869. +
  2870. +-void brcmf_txcomplete(struct device *dev, struct sk_buff *txp, bool success)
  2871. +-{
  2872. +- struct brcmf_bus *bus_if = dev_get_drvdata(dev);
  2873. +- struct brcmf_pub *drvr = bus_if->drvr;
  2874. +- struct brcmf_if *ifp;
  2875. +-
  2876. +- /* await txstatus signal for firmware if active */
  2877. +- if (brcmf_fws_fc_active(drvr->fws)) {
  2878. +- if (!success)
  2879. +- brcmf_fws_bustxfail(drvr->fws, txp);
  2880. +- } else {
  2881. +- if (brcmf_proto_hdrpull(drvr, false, txp, &ifp))
  2882. +- brcmu_pkt_buf_free_skb(txp);
  2883. +- else
  2884. +- brcmf_txfinalize(ifp, txp, success);
  2885. +- }
  2886. +-}
  2887. +-
  2888. + static void brcmf_ethtool_get_drvinfo(struct net_device *ndev,
  2889. + struct ethtool_drvinfo *info)
  2890. + {
  2891. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
  2892. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
  2893. +@@ -2266,7 +2266,8 @@ done:
  2894. + bus->tx_seq = (bus->tx_seq + pktq->qlen) % SDPCM_SEQ_WRAP;
  2895. + skb_queue_walk_safe(pktq, pkt_next, tmp) {
  2896. + __skb_unlink(pkt_next, pktq);
  2897. +- brcmf_txcomplete(bus->sdiodev->dev, pkt_next, ret == 0);
  2898. ++ brcmf_proto_bcdc_txcomplete(bus->sdiodev->dev, pkt_next,
  2899. ++ ret == 0);
  2900. + }
  2901. + return ret;
  2902. + }
  2903. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
  2904. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
  2905. +@@ -483,7 +483,7 @@ static void brcmf_usb_tx_complete(struct
  2906. + req->skb);
  2907. + brcmf_usb_del_fromq(devinfo, req);
  2908. +
  2909. +- brcmf_txcomplete(devinfo->dev, req->skb, urb->status == 0);
  2910. ++ brcmf_proto_bcdc_txcomplete(devinfo->dev, req->skb, urb->status == 0);
  2911. + req->skb = NULL;
  2912. + brcmf_usb_enq(devinfo, &devinfo->tx_freeq, req, &devinfo->tx_freecount);
  2913. + spin_lock_irqsave(&devinfo->tx_flowblock_lock, flags);
  2914. diff --git a/package/kernel/mac80211/patches/323-0008-brcmfmac-wrap-brcmf_fws_add_interface-into-bcdc-laye.patch b/package/kernel/mac80211/patches/323-0008-brcmfmac-wrap-brcmf_fws_add_interface-into-bcdc-laye.patch
  2915. new file mode 100644
  2916. index 0000000000000000000000000000000000000000..a68c6ab0c33d1a18ff315540cfb1d6be83cb0056
  2917. --- /dev/null
  2918. +++ b/package/kernel/mac80211/patches/323-0008-brcmfmac-wrap-brcmf_fws_add_interface-into-bcdc-laye.patch
  2919. @@ -0,0 +1,95 @@
  2920. +From 9fdc64bbdbe7bd546e0fbcedd2f1c03448c6df42 Mon Sep 17 00:00:00 2001
  2921. +From: Franky Lin <franky.lin@broadcom.com>
  2922. +Date: Fri, 10 Mar 2017 21:17:04 +0000
  2923. +Subject: [PATCH] brcmfmac: wrap brcmf_fws_add_interface into bcdc layer
  2924. +
  2925. +fwsignal is only used by bcdc. Create a new protocol interface function
  2926. +brcmf_proto_add_if for core module to notify protocol layer upon a new
  2927. +interface is created.
  2928. +
  2929. +Signed-off-by: Franky Lin <franky.lin@broadcom.com>
  2930. +Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
  2931. +Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  2932. +---
  2933. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 7 +++++++
  2934. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 2 +-
  2935. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c | 3 ++-
  2936. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h | 9 +++++++++
  2937. + 4 files changed, 19 insertions(+), 2 deletions(-)
  2938. +
  2939. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
  2940. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
  2941. +@@ -399,6 +399,12 @@ static void brcmf_proto_bcdc_rxreorder(s
  2942. + brcmf_fws_rxreorder(ifp, skb);
  2943. + }
  2944. +
  2945. ++static void
  2946. ++brcmf_proto_bcdc_add_if(struct brcmf_if *ifp)
  2947. ++{
  2948. ++ brcmf_fws_add_interface(ifp);
  2949. ++}
  2950. ++
  2951. + int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr)
  2952. + {
  2953. + struct brcmf_bcdc *bcdc;
  2954. +@@ -422,6 +428,7 @@ int brcmf_proto_bcdc_attach(struct brcmf
  2955. + drvr->proto->delete_peer = brcmf_proto_bcdc_delete_peer;
  2956. + drvr->proto->add_tdls_peer = brcmf_proto_bcdc_add_tdls_peer;
  2957. + drvr->proto->rxreorder = brcmf_proto_bcdc_rxreorder;
  2958. ++ drvr->proto->add_if = brcmf_proto_bcdc_add_if;
  2959. + drvr->proto->pd = bcdc;
  2960. +
  2961. + drvr->hdrlen += BCDC_HEADER_LEN + BRCMF_PROT_FW_SIGNAL_MAX_TXBYTES;
  2962. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
  2963. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
  2964. +@@ -990,7 +990,7 @@ int brcmf_bus_started(struct device *dev
  2965. + if (ret < 0)
  2966. + goto fail;
  2967. +
  2968. +- brcmf_fws_add_interface(ifp);
  2969. ++ brcmf_proto_add_if(drvr, ifp);
  2970. +
  2971. + drvr->config = brcmf_cfg80211_attach(drvr, bus_if->dev,
  2972. + drvr->settings->p2p_enable);
  2973. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
  2974. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
  2975. +@@ -25,6 +25,7 @@
  2976. + #include "fwsignal.h"
  2977. + #include "fweh.h"
  2978. + #include "fwil.h"
  2979. ++#include "proto.h"
  2980. +
  2981. + /**
  2982. + * struct brcmf_fweh_queue_item - event item on event queue.
  2983. +@@ -172,7 +173,7 @@ static void brcmf_fweh_handle_if_event(s
  2984. + if (IS_ERR(ifp))
  2985. + return;
  2986. + if (!is_p2pdev)
  2987. +- brcmf_fws_add_interface(ifp);
  2988. ++ brcmf_proto_add_if(drvr, ifp);
  2989. + if (!drvr->fweh.evt_handler[BRCMF_E_IF])
  2990. + if (brcmf_net_attach(ifp, false) < 0)
  2991. + return;
  2992. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
  2993. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
  2994. +@@ -44,6 +44,7 @@ struct brcmf_proto {
  2995. + void (*add_tdls_peer)(struct brcmf_pub *drvr, int ifidx,
  2996. + u8 peer[ETH_ALEN]);
  2997. + void (*rxreorder)(struct brcmf_if *ifp, struct sk_buff *skb);
  2998. ++ void (*add_if)(struct brcmf_if *ifp);
  2999. + void *pd;
  3000. + };
  3001. +
  3002. +@@ -118,4 +119,12 @@ brcmf_proto_rxreorder(struct brcmf_if *i
  3003. + ifp->drvr->proto->rxreorder(ifp, skb);
  3004. + }
  3005. +
  3006. ++static inline void
  3007. ++brcmf_proto_add_if(struct brcmf_pub *drvr, struct brcmf_if *ifp)
  3008. ++{
  3009. ++ if (!drvr->proto->add_if)
  3010. ++ return;
  3011. ++ drvr->proto->add_if(ifp);
  3012. ++}
  3013. ++
  3014. + #endif /* BRCMFMAC_PROTO_H */
  3015. diff --git a/package/kernel/mac80211/patches/323-0009-brcmfmac-wrap-brcmf_fws_del_interface-into-bcdc-laye.patch b/package/kernel/mac80211/patches/323-0009-brcmfmac-wrap-brcmf_fws_del_interface-into-bcdc-laye.patch
  3016. new file mode 100644
  3017. index 0000000000000000000000000000000000000000..ded8d7b944de5515912fbae5b1351eb97fc0c59e
  3018. --- /dev/null
  3019. +++ b/package/kernel/mac80211/patches/323-0009-brcmfmac-wrap-brcmf_fws_del_interface-into-bcdc-laye.patch
  3020. @@ -0,0 +1,83 @@
  3021. +From c02a5eb82056f75615cb48aa540bfd245f489b99 Mon Sep 17 00:00:00 2001
  3022. +From: Franky Lin <franky.lin@broadcom.com>
  3023. +Date: Fri, 10 Mar 2017 21:17:05 +0000
  3024. +Subject: [PATCH] brcmfmac: wrap brcmf_fws_del_interface into bcdc layer
  3025. +
  3026. +Create a new protocol interface function brcmf_proto_del_if for core
  3027. +module to notify protocol layer upon interface deletion.
  3028. +
  3029. +Signed-off-by: Franky Lin <franky.lin@broadcom.com>
  3030. +Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
  3031. +Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  3032. +---
  3033. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 7 +++++++
  3034. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 4 ++--
  3035. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h | 9 +++++++++
  3036. + 3 files changed, 18 insertions(+), 2 deletions(-)
  3037. +
  3038. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
  3039. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
  3040. +@@ -405,6 +405,12 @@ brcmf_proto_bcdc_add_if(struct brcmf_if
  3041. + brcmf_fws_add_interface(ifp);
  3042. + }
  3043. +
  3044. ++static void
  3045. ++brcmf_proto_bcdc_del_if(struct brcmf_if *ifp)
  3046. ++{
  3047. ++ brcmf_fws_del_interface(ifp);
  3048. ++}
  3049. ++
  3050. + int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr)
  3051. + {
  3052. + struct brcmf_bcdc *bcdc;
  3053. +@@ -429,6 +435,7 @@ int brcmf_proto_bcdc_attach(struct brcmf
  3054. + drvr->proto->add_tdls_peer = brcmf_proto_bcdc_add_tdls_peer;
  3055. + drvr->proto->rxreorder = brcmf_proto_bcdc_rxreorder;
  3056. + drvr->proto->add_if = brcmf_proto_bcdc_add_if;
  3057. ++ drvr->proto->del_if = brcmf_proto_bcdc_del_if;
  3058. + drvr->proto->pd = bcdc;
  3059. +
  3060. + drvr->hdrlen += BCDC_HEADER_LEN + BRCMF_PROT_FW_SIGNAL_MAX_TXBYTES;
  3061. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
  3062. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
  3063. +@@ -706,7 +706,7 @@ void brcmf_remove_interface(struct brcmf
  3064. + return;
  3065. + brcmf_dbg(TRACE, "Enter, bsscfgidx=%d, ifidx=%d\n", ifp->bsscfgidx,
  3066. + ifp->ifidx);
  3067. +- brcmf_fws_del_interface(ifp);
  3068. ++ brcmf_proto_del_if(ifp->drvr, ifp);
  3069. + brcmf_del_if(ifp->drvr, ifp->bsscfgidx, rtnl_locked);
  3070. + }
  3071. +
  3072. +@@ -1035,7 +1035,7 @@ fail:
  3073. + drvr->config = NULL;
  3074. + }
  3075. + if (drvr->fws) {
  3076. +- brcmf_fws_del_interface(ifp);
  3077. ++ brcmf_proto_del_if(ifp->drvr, ifp);
  3078. + brcmf_fws_deinit(drvr);
  3079. + }
  3080. + brcmf_net_detach(ifp->ndev, false);
  3081. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
  3082. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
  3083. +@@ -45,6 +45,7 @@ struct brcmf_proto {
  3084. + u8 peer[ETH_ALEN]);
  3085. + void (*rxreorder)(struct brcmf_if *ifp, struct sk_buff *skb);
  3086. + void (*add_if)(struct brcmf_if *ifp);
  3087. ++ void (*del_if)(struct brcmf_if *ifp);
  3088. + void *pd;
  3089. + };
  3090. +
  3091. +@@ -127,4 +128,12 @@ brcmf_proto_add_if(struct brcmf_pub *drv
  3092. + drvr->proto->add_if(ifp);
  3093. + }
  3094. +
  3095. ++static inline void
  3096. ++brcmf_proto_del_if(struct brcmf_pub *drvr, struct brcmf_if *ifp)
  3097. ++{
  3098. ++ if (!drvr->proto->del_if)
  3099. ++ return;
  3100. ++ drvr->proto->del_if(ifp);
  3101. ++}
  3102. ++
  3103. + #endif /* BRCMFMAC_PROTO_H */
  3104. diff --git a/package/kernel/mac80211/patches/323-0010-brcmfmac-wrap-brcmf_fws_reset_interface-into-bcdc-la.patch b/package/kernel/mac80211/patches/323-0010-brcmfmac-wrap-brcmf_fws_reset_interface-into-bcdc-la.patch
  3105. new file mode 100644
  3106. index 0000000000000000000000000000000000000000..34e71d8f5cccc550b901890b5619a7f67123335a
  3107. --- /dev/null
  3108. +++ b/package/kernel/mac80211/patches/323-0010-brcmfmac-wrap-brcmf_fws_reset_interface-into-bcdc-la.patch
  3109. @@ -0,0 +1,82 @@
  3110. +From 66ded1f8b33cdd9d6d3e20f5f8dd23615a110e70 Mon Sep 17 00:00:00 2001
  3111. +From: Franky Lin <franky.lin@broadcom.com>
  3112. +Date: Fri, 10 Mar 2017 21:17:06 +0000
  3113. +Subject: [PATCH] brcmfmac: wrap brcmf_fws_reset_interface into bcdc layer
  3114. +
  3115. +Create a new protocol interface function brcmf_proto_reset_if for core
  3116. +module to notify protocol layer when interface role changes.
  3117. +
  3118. +Signed-off-by: Franky Lin <franky.lin@broadcom.com>
  3119. +Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
  3120. +Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  3121. +---
  3122. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 7 +++++++
  3123. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c | 3 +--
  3124. + drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h | 9 +++++++++
  3125. + 3 files changed, 17 insertions(+), 2 deletions(-)
  3126. +
  3127. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
  3128. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
  3129. +@@ -411,6 +411,12 @@ brcmf_proto_bcdc_del_if(struct brcmf_if
  3130. + brcmf_fws_del_interface(ifp);
  3131. + }
  3132. +
  3133. ++static void
  3134. ++brcmf_proto_bcdc_reset_if(struct brcmf_if *ifp)
  3135. ++{
  3136. ++ brcmf_fws_reset_interface(ifp);
  3137. ++}
  3138. ++
  3139. + int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr)
  3140. + {
  3141. + struct brcmf_bcdc *bcdc;
  3142. +@@ -436,6 +442,7 @@ int brcmf_proto_bcdc_attach(struct brcmf
  3143. + drvr->proto->rxreorder = brcmf_proto_bcdc_rxreorder;
  3144. + drvr->proto->add_if = brcmf_proto_bcdc_add_if;
  3145. + drvr->proto->del_if = brcmf_proto_bcdc_del_if;
  3146. ++ drvr->proto->reset_if = brcmf_proto_bcdc_reset_if;
  3147. + drvr->proto->pd = bcdc;
  3148. +
  3149. + drvr->hdrlen += BCDC_HEADER_LEN + BRCMF_PROT_FW_SIGNAL_MAX_TXBYTES;
  3150. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
  3151. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
  3152. +@@ -22,7 +22,6 @@
  3153. + #include "core.h"
  3154. + #include "debug.h"
  3155. + #include "tracepoint.h"
  3156. +-#include "fwsignal.h"
  3157. + #include "fweh.h"
  3158. + #include "fwil.h"
  3159. + #include "proto.h"
  3160. +@@ -180,7 +179,7 @@ static void brcmf_fweh_handle_if_event(s
  3161. + }
  3162. +
  3163. + if (ifp && ifevent->action == BRCMF_E_IF_CHANGE)
  3164. +- brcmf_fws_reset_interface(ifp);
  3165. ++ brcmf_proto_reset_if(drvr, ifp);
  3166. +
  3167. + err = brcmf_fweh_call_event_handler(ifp, emsg->event_code, emsg, data);
  3168. +
  3169. +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
  3170. ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
  3171. +@@ -46,6 +46,7 @@ struct brcmf_proto {
  3172. + void (*rxreorder)(struct brcmf_if *ifp, struct sk_buff *skb);
  3173. + void (*add_if)(struct brcmf_if *ifp);
  3174. + void (*del_if)(struct brcmf_if *ifp);
  3175. ++ void (*reset_if)(struct brcmf_if *ifp);
  3176. + void *pd;
  3177. + };
  3178. +
  3179. +@@ -136,4 +137,12 @@ brcmf_proto_del_if(struct brcmf_pub *drv
  3180. + drvr->proto->del_if(ifp);
  3181. + }
  3182. +
  3183. ++static inline void
  3184. ++brcmf_proto_reset_if(struct brcmf_pub *drvr, struct brcmf_if *ifp)
  3185. ++{
  3186. ++ if (!drvr->proto->reset_if)
  3187. ++ return;
  3188. ++ drvr->proto->reset_if(ifp);
  3189. ++}
  3190. ++
  3191. + #endif /* BRCMFMAC_PROTO_H */
  3192. diff --git a/package/kernel/mac80211/patches/326-ath9k-fix-ar934x-OTP-offsets.patch b/package/kernel/mac80211/patches/326-ath9k-fix-ar934x-OTP-offsets.patch
  3193. new file mode 100644
  3194. index 0000000000000000000000000000000000000000..60de2b6d147f0c77b58c3e5992df9d8014a9e17d
  3195. --- /dev/null
  3196. +++ b/package/kernel/mac80211/patches/326-ath9k-fix-ar934x-OTP-offsets.patch
  3197. @@ -0,0 +1,42 @@
  3198. +From: Christian Lamparter <chunkeey@googlemail.com>
  3199. +Date: Tue, 14 Feb 2017 20:10:30 +0100
  3200. +Subject: ath9k: use correct OTP register offsets for the AR9340 and AR9550
  3201. +
  3202. +This patch fixes the OTP register definitions for the AR934x and AR9550
  3203. +WMAC SoC.
  3204. +
  3205. +Previously, the ath9k driver was unable to initialize the integrated
  3206. +WMAC on an Aerohive AP121:
  3207. +
  3208. +| ath: phy0: timeout (1000 us) on reg 0x30018: 0xbadc0ffe & 0x00000007 != 0x00000004
  3209. +| ath: phy0: timeout (1000 us) on reg 0x30018: 0xbadc0ffe & 0x00000007 != 0x00000004
  3210. +| ath: phy0: Unable to initialize hardware; initialization status: -5
  3211. +| ath9k ar934x_wmac: failed to initialize device
  3212. +| ath9k: probe of ar934x_wmac failed with error -5
  3213. +
  3214. +It turns out that the AR9300_OTP_STATUS and AR9300_OTP_DATA
  3215. +definitions contain a typo.
  3216. +
  3217. +Fixes: add295a4afbdf5852d0 "ath9k: use correct OTP register offsets for AR9550"
  3218. +Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
  3219. +Signed-off-by: Chris Blake <chrisrblake93@gmail.com>
  3220. +---
  3221. +
  3222. +--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h
  3223. ++++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h
  3224. +@@ -75,13 +75,13 @@
  3225. + #define AR9300_OTP_BASE \
  3226. + ((AR_SREV_9340(ah) || AR_SREV_9550(ah)) ? 0x30000 : 0x14000)
  3227. + #define AR9300_OTP_STATUS \
  3228. +- ((AR_SREV_9340(ah) || AR_SREV_9550(ah)) ? 0x30018 : 0x15f18)
  3229. ++ ((AR_SREV_9340(ah) || AR_SREV_9550(ah)) ? 0x31018 : 0x15f18)
  3230. + #define AR9300_OTP_STATUS_TYPE 0x7
  3231. + #define AR9300_OTP_STATUS_VALID 0x4
  3232. + #define AR9300_OTP_STATUS_ACCESS_BUSY 0x2
  3233. + #define AR9300_OTP_STATUS_SM_BUSY 0x1
  3234. + #define AR9300_OTP_READ_DATA \
  3235. +- ((AR_SREV_9340(ah) || AR_SREV_9550(ah)) ? 0x3001c : 0x15f1c)
  3236. ++ ((AR_SREV_9340(ah) || AR_SREV_9550(ah)) ? 0x3101c : 0x15f1c)
  3237. +
  3238. + enum targetPowerHTRates {
  3239. + HT_TARGET_RATE_0_8_16,
  3240. diff --git a/package/kernel/mac80211/patches/327-ath10k-increase-BMI-timeout.patch b/package/kernel/mac80211/patches/327-ath10k-increase-BMI-timeout.patch
  3241. new file mode 100644
  3242. index 0000000000000000000000000000000000000000..c9f493bcd8fe29afe1e08dc31b6370507b95fc72
  3243. --- /dev/null
  3244. +++ b/package/kernel/mac80211/patches/327-ath10k-increase-BMI-timeout.patch
  3245. @@ -0,0 +1,31 @@
  3246. +From: Ben Greear <greearb@candelatech.com>
  3247. +Date: Wed, 31 May 2017 14:21:19 +0300
  3248. +Subject: [PATCH] ath10k: increase BMI timeout
  3249. +
  3250. +When testing a 9888 chipset NIC, I notice it often takes
  3251. +almost 2 seconds, and then many times OTP fails, probably due
  3252. +to the two-second timeout.
  3253. +
  3254. +[ 2269.841842] ath10k_pci 0000:05:00.0: bmi cmd took: 1984 jiffies (HZ: 1000), rv: 0
  3255. +[ 2273.608185] ath10k_pci 0000:05:00.0: bmi cmd took: 1986 jiffies (HZ: 1000), rv: 0
  3256. +[ 2277.294732] ath10k_pci 0000:05:00.0: bmi cmd took: 1989 jiffies (HZ: 1000), rv: 0
  3257. +
  3258. +So, increase the BMI timeout to 3 seconds.
  3259. +
  3260. +Signed-off-by: Ben Greear <greearb@candelatech.com>
  3261. +Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
  3262. +---
  3263. +
  3264. +--- a/drivers/net/wireless/ath/ath10k/bmi.h
  3265. ++++ b/drivers/net/wireless/ath/ath10k/bmi.h
  3266. +@@ -187,8 +187,8 @@ struct bmi_target_info {
  3267. + u32 type;
  3268. + };
  3269. +
  3270. +-/* in msec */
  3271. +-#define BMI_COMMUNICATION_TIMEOUT_HZ (2 * HZ)
  3272. ++/* in jiffies */
  3273. ++#define BMI_COMMUNICATION_TIMEOUT_HZ (3 * HZ)
  3274. +
  3275. + #define BMI_CE_NUM_TO_TARG 0
  3276. + #define BMI_CE_NUM_TO_HOST 1
  3277. diff --git a/package/kernel/mac80211/patches/328-ath10k-log-when-longer-bmi-cmds-happen.patch b/package/kernel/mac80211/patches/328-ath10k-log-when-longer-bmi-cmds-happen.patch
  3278. new file mode 100644
  3279. index 0000000000000000000000000000000000000000..500f72ff988b87418ca235354ff33e4e4b96e716
  3280. --- /dev/null
  3281. +++ b/package/kernel/mac80211/patches/328-ath10k-log-when-longer-bmi-cmds-happen.patch
  3282. @@ -0,0 +1,74 @@
  3283. +From: Ben Greear <greearb@candelatech.com>
  3284. +Date: Wed, 31 May 2017 14:21:21 +0300
  3285. +Subject: [PATCH] ath10k: log when longer bmi cmds happen
  3286. +
  3287. +This lets one have a clue that maybe timeouts are happening
  3288. +when we just aren't waiting long enough.
  3289. +
  3290. +Signed-off-by: Ben Greear <greearb@candelatech.com>
  3291. +Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
  3292. +---
  3293. +
  3294. +--- a/drivers/net/wireless/ath/ath10k/pci.c
  3295. ++++ b/drivers/net/wireless/ath/ath10k/pci.c
  3296. +@@ -101,7 +101,8 @@ static int ath10k_pci_init_irq(struct at
  3297. + static int ath10k_pci_deinit_irq(struct ath10k *ar);
  3298. + static int ath10k_pci_request_irq(struct ath10k *ar);
  3299. + static void ath10k_pci_free_irq(struct ath10k *ar);
  3300. +-static int ath10k_pci_bmi_wait(struct ath10k_ce_pipe *tx_pipe,
  3301. ++static int ath10k_pci_bmi_wait(struct ath10k *ar,
  3302. ++ struct ath10k_ce_pipe *tx_pipe,
  3303. + struct ath10k_ce_pipe *rx_pipe,
  3304. + struct bmi_xfer *xfer);
  3305. + static int ath10k_pci_qca99x0_chip_reset(struct ath10k *ar);
  3306. +@@ -1843,7 +1844,7 @@ int ath10k_pci_hif_exchange_bmi_msg(stru
  3307. + if (ret)
  3308. + goto err_resp;
  3309. +
  3310. +- ret = ath10k_pci_bmi_wait(ce_tx, ce_rx, &xfer);
  3311. ++ ret = ath10k_pci_bmi_wait(ar, ce_tx, ce_rx, &xfer);
  3312. + if (ret) {
  3313. + u32 unused_buffer;
  3314. + unsigned int unused_nbytes;
  3315. +@@ -1910,23 +1911,37 @@ static void ath10k_pci_bmi_recv_data(str
  3316. + xfer->rx_done = true;
  3317. + }
  3318. +
  3319. +-static int ath10k_pci_bmi_wait(struct ath10k_ce_pipe *tx_pipe,
  3320. ++static int ath10k_pci_bmi_wait(struct ath10k *ar,
  3321. ++ struct ath10k_ce_pipe *tx_pipe,
  3322. + struct ath10k_ce_pipe *rx_pipe,
  3323. + struct bmi_xfer *xfer)
  3324. + {
  3325. + unsigned long timeout = jiffies + BMI_COMMUNICATION_TIMEOUT_HZ;
  3326. ++ unsigned long started = jiffies;
  3327. ++ unsigned long dur;
  3328. ++ int ret;
  3329. +
  3330. + while (time_before_eq(jiffies, timeout)) {
  3331. + ath10k_pci_bmi_send_done(tx_pipe);
  3332. + ath10k_pci_bmi_recv_data(rx_pipe);
  3333. +
  3334. +- if (xfer->tx_done && (xfer->rx_done == xfer->wait_for_resp))
  3335. +- return 0;
  3336. ++ if (xfer->tx_done && (xfer->rx_done == xfer->wait_for_resp)) {
  3337. ++ ret = 0;
  3338. ++ goto out;
  3339. ++ }
  3340. +
  3341. + schedule();
  3342. + }
  3343. +
  3344. +- return -ETIMEDOUT;
  3345. ++ ret = -ETIMEDOUT;
  3346. ++
  3347. ++out:
  3348. ++ dur = jiffies - started;
  3349. ++ if (dur > HZ)
  3350. ++ ath10k_dbg(ar, ATH10K_DBG_BMI,
  3351. ++ "bmi cmd took %lu jiffies hz %d ret %d\n",
  3352. ++ dur, HZ, ret);
  3353. ++ return ret;
  3354. + }
  3355. +
  3356. + /*
  3357. diff --git a/package/kernel/mac80211/patches/329-ath10k-add-BMI-parameters-to-fix-calibration-from-DT.patch b/package/kernel/mac80211/patches/329-ath10k-add-BMI-parameters-to-fix-calibration-from-DT.patch
  3358. new file mode 100644
  3359. index 0000000000000000000000000000000000000000..3fcf505e1547b474d87ecf5d42a3f1e2cf08068f
  3360. --- /dev/null
  3361. +++ b/package/kernel/mac80211/patches/329-ath10k-add-BMI-parameters-to-fix-calibration-from-DT.patch
  3362. @@ -0,0 +1,80 @@
  3363. +From: Anilkumar Kolli <akolli@qti.qualcomm.com>
  3364. +Date: Wed, 31 May 2017 14:21:27 +0300
  3365. +Subject: [PATCH] ath10k: add BMI parameters to fix calibration from
  3366. + DT/pre-cal
  3367. +
  3368. +QCA99X0, QCA9888, QCA9984 supports calibration data in
  3369. +either OTP or DT/pre-cal file. Current ath10k supports
  3370. +Calibration data from OTP only.
  3371. +
  3372. +If caldata is loaded from DT/pre-cal file, fetching board id
  3373. +and applying calibration parameters like tx power gets failed.
  3374. +
  3375. +error log:
  3376. +[ 15.733663] ath10k_pci 0000:01:00.0: failed to fetch board file: -2
  3377. +[ 15.741474] ath10k_pci 0000:01:00.0: could not probe fw (-2)
  3378. +
  3379. +This patch adds calibration data support from DT/pre-cal
  3380. +file. Below parameters are used to get board id and
  3381. +applying calibration parameters from cal data.
  3382. +
  3383. + EEPROM[OTP] FLASH[DT/pre-cal file]
  3384. +Cal param 0x700 0x10000
  3385. +Board id 0x10 0x8000
  3386. +
  3387. +Tested on QCA9888 with pre-cal file.
  3388. +
  3389. +Signed-off-by: Anilkumar Kolli <akolli@qti.qualcomm.com>
  3390. +Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
  3391. +---
  3392. +
  3393. +--- a/drivers/net/wireless/ath/ath10k/bmi.h
  3394. ++++ b/drivers/net/wireless/ath/ath10k/bmi.h
  3395. +@@ -83,6 +83,8 @@ enum bmi_cmd_id {
  3396. + #define BMI_NVRAM_SEG_NAME_SZ 16
  3397. +
  3398. + #define BMI_PARAM_GET_EEPROM_BOARD_ID 0x10
  3399. ++#define BMI_PARAM_GET_FLASH_BOARD_ID 0x8000
  3400. ++#define BMI_PARAM_FLASH_SECTION_ALL 0x10000
  3401. +
  3402. + #define ATH10K_BMI_BOARD_ID_FROM_OTP_MASK 0x7c00
  3403. + #define ATH10K_BMI_BOARD_ID_FROM_OTP_LSB 10
  3404. +--- a/drivers/net/wireless/ath/ath10k/core.c
  3405. ++++ b/drivers/net/wireless/ath/ath10k/core.c
  3406. +@@ -657,7 +657,7 @@ static int ath10k_core_get_board_id_from
  3407. + {
  3408. + u32 result, address;
  3409. + u8 board_id, chip_id;
  3410. +- int ret;
  3411. ++ int ret, bmi_board_id_param;
  3412. +
  3413. + address = ar->hw_params.patch_load_addr;
  3414. +
  3415. +@@ -681,8 +681,13 @@ static int ath10k_core_get_board_id_from
  3416. + return ret;
  3417. + }
  3418. +
  3419. +- ret = ath10k_bmi_execute(ar, address, BMI_PARAM_GET_EEPROM_BOARD_ID,
  3420. +- &result);
  3421. ++ if (ar->cal_mode == ATH10K_PRE_CAL_MODE_DT ||
  3422. ++ ar->cal_mode == ATH10K_PRE_CAL_MODE_FILE)
  3423. ++ bmi_board_id_param = BMI_PARAM_GET_FLASH_BOARD_ID;
  3424. ++ else
  3425. ++ bmi_board_id_param = BMI_PARAM_GET_EEPROM_BOARD_ID;
  3426. ++
  3427. ++ ret = ath10k_bmi_execute(ar, address, bmi_board_id_param, &result);
  3428. + if (ret) {
  3429. + ath10k_err(ar, "could not execute otp for board id check: %d\n",
  3430. + ret);
  3431. +@@ -810,6 +815,11 @@ static int ath10k_download_and_run_otp(s
  3432. + return ret;
  3433. + }
  3434. +
  3435. ++ /* As of now pre-cal is valid for 10_4 variants */
  3436. ++ if (ar->cal_mode == ATH10K_PRE_CAL_MODE_DT ||
  3437. ++ ar->cal_mode == ATH10K_PRE_CAL_MODE_FILE)
  3438. ++ bmi_otp_exe_param = BMI_PARAM_FLASH_SECTION_ALL;
  3439. ++
  3440. + ret = ath10k_bmi_execute(ar, address, bmi_otp_exe_param, &result);
  3441. + if (ret) {
  3442. + ath10k_err(ar, "could not execute otp (%d)\n", ret);
  3443. diff --git a/package/kernel/mac80211/patches/330-ath9k-adjust-tx-power-reduction-for-US-regulatory-do.patch b/package/kernel/mac80211/patches/330-ath9k-adjust-tx-power-reduction-for-US-regulatory-do.patch
  3444. new file mode 100644
  3445. index 0000000000000000000000000000000000000000..d799ab4a628881f7f702bed762421befe33f1d59
  3446. --- /dev/null
  3447. +++ b/package/kernel/mac80211/patches/330-ath9k-adjust-tx-power-reduction-for-US-regulatory-do.patch
  3448. @@ -0,0 +1,23 @@
  3449. +From: Felix Fietkau <nbd@nbd.name>
  3450. +Date: Wed, 19 Jul 2017 08:49:31 +0200
  3451. +Subject: [PATCH] ath9k: adjust tx power reduction for US regulatory domain
  3452. +
  3453. +FCC regulatory rules allow for up to 3 dBi antenna gain. Account for
  3454. +this in the EEPROM based tx power reduction code.
  3455. +
  3456. +Signed-off-by: Felix Fietkau <nbd@nbd.name>
  3457. +---
  3458. +
  3459. +--- a/drivers/net/wireless/ath/ath9k/hw.c
  3460. ++++ b/drivers/net/wireless/ath/ath9k/hw.c
  3461. +@@ -2954,6 +2954,10 @@ void ath9k_hw_apply_txpower(struct ath_h
  3462. + if (ant_gain > max_gain)
  3463. + ant_reduction = ant_gain - max_gain;
  3464. +
  3465. ++ /* FCC allows maximum antenna gain of 3 dBi */
  3466. ++ if (reg->region == NL80211_DFS_FCC)
  3467. ++ ant_reduction = max_t(int, ant_reduction - 6, 0);
  3468. ++
  3469. + ah->eep_ops->set_txpower(ah, chan, ctl, ant_reduction, new_pwr, test);
  3470. + }
  3471. +
  3472. diff --git a/package/kernel/mac80211/patches/331-ath9k-fix-more-data-flag-for-buffered-multicast-pack.patch b/package/kernel/mac80211/patches/331-ath9k-fix-more-data-flag-for-buffered-multicast-pack.patch
  3473. new file mode 100644
  3474. index 0000000000000000000000000000000000000000..1e0761eb1547ba7885e79f8444e302f3c424e24f
  3475. --- /dev/null
  3476. +++ b/package/kernel/mac80211/patches/331-ath9k-fix-more-data-flag-for-buffered-multicast-pack.patch
  3477. @@ -0,0 +1,40 @@
  3478. +From: Felix Fietkau <nbd@nbd.name>
  3479. +Date: Sun, 23 Jul 2017 14:58:22 +0200
  3480. +Subject: [PATCH] ath9k: fix more-data flag for buffered multicast packets
  3481. +
  3482. +The flag needs to be cleared for the last packet in the list, not the
  3483. +first one. Fixes some issues with multicast packet loss for powersave
  3484. +clients connected to an ath9k AP.
  3485. +
  3486. +Signed-off-by: Felix Fietkau <nbd@nbd.name>
  3487. +---
  3488. +
  3489. +--- a/drivers/net/wireless/ath/ath9k/xmit.c
  3490. ++++ b/drivers/net/wireless/ath/ath9k/xmit.c
  3491. +@@ -2451,7 +2451,6 @@ void ath_tx_cabq(struct ieee80211_hw *hw
  3492. + .txq = sc->beacon.cabq
  3493. + };
  3494. + struct ath_tx_info info = {};
  3495. +- struct ieee80211_hdr *hdr;
  3496. + struct ath_buf *bf_tail = NULL;
  3497. + struct ath_buf *bf;
  3498. + LIST_HEAD(bf_q);
  3499. +@@ -2495,15 +2494,10 @@ void ath_tx_cabq(struct ieee80211_hw *hw
  3500. + if (list_empty(&bf_q))
  3501. + return;
  3502. +
  3503. +- bf = list_first_entry(&bf_q, struct ath_buf, list);
  3504. +- hdr = (struct ieee80211_hdr *) bf->bf_mpdu->data;
  3505. +-
  3506. +- if (hdr->frame_control & cpu_to_le16(IEEE80211_FCTL_MOREDATA)) {
  3507. +- hdr->frame_control &= ~cpu_to_le16(IEEE80211_FCTL_MOREDATA);
  3508. +- dma_sync_single_for_device(sc->dev, bf->bf_buf_addr,
  3509. +- sizeof(*hdr), DMA_TO_DEVICE);
  3510. +- }
  3511. ++ bf = list_last_entry(&bf_q, struct ath_buf, list);
  3512. ++ ath9k_set_moredata(sc, bf, false);
  3513. +
  3514. ++ bf = list_first_entry(&bf_q, struct ath_buf, list);
  3515. + ath_txq_lock(sc, txctl.txq);
  3516. + ath_tx_fill_desc(sc, bf, txctl.txq, 0);
  3517. + ath_tx_txqaddbuf(sc, txctl.txq, &bf_q, false);
  3518. diff --git a/package/kernel/mac80211/patches/531-ath9k_extra_platform_leds.patch b/package/kernel/mac80211/patches/531-ath9k_extra_platform_leds.patch
  3519. index 35d8e8bd42399797d4904f60d61f7118c156ba7c..8ed7ad8a09a13f85e2b0f437020b650cacb89190 100644
  3520. --- a/package/kernel/mac80211/patches/531-ath9k_extra_platform_leds.patch
  3521. +++ b/package/kernel/mac80211/patches/531-ath9k_extra_platform_leds.patch
  3522. @@ -56,16 +56,21 @@
  3523. INIT_LIST_HEAD(&sc->leds);
  3524. -@@ -144,6 +165,12 @@ void ath_init_leds(struct ath_softc *sc)
  3525. +@@ -134,6 +155,17 @@ void ath_init_leds(struct ath_softc *sc)
  3526. - ath_create_gpio_led(sc, sc->sc_ah->led_pin, led_name, trigger,
  3527. - !sc->sc_ah->config.led_active_high);
  3528. + ath_fill_led_pin(sc);
  3529. +
  3530. ++ if (pdata && pdata->leds && pdata->num_leds)
  3531. ++ for (i = 0; i < pdata->num_leds; i++) {
  3532. ++ if (pdata->leds[i].gpio == sc->sc_ah->led_pin)
  3533. ++ sc->sc_ah->led_pin = -1;
  3534. ++
  3535. ++ ath_create_platform_led(sc, &pdata->leds[i]);
  3536. ++ }
  3537. +
  3538. -+ if (!pdata)
  3539. ++ if (sc->sc_ah->led_pin < 0)
  3540. + return;
  3541. +
  3542. -+ for (i = 0; i < pdata->num_leds; i++)
  3543. -+ ath_create_platform_led(sc, &pdata->leds[i]);
  3544. - }
  3545. - #endif
  3546. + snprintf(led_name, sizeof(led_name), "ath9k-%s",
  3547. + wiphy_name(sc->hw->wiphy));
  3548. diff --git a/package/kernel/mac80211/patches/546-ath9k_platform_led_name.patch b/package/kernel/mac80211/patches/546-ath9k_platform_led_name.patch
  3549. deleted file mode 100644
  3550. index ced72c6c69fe30ebbc1c416c5e60d95dc985d6db..0000000000000000000000000000000000000000
  3551. --- a/package/kernel/mac80211/patches/546-ath9k_platform_led_name.patch
  3552. +++ /dev/null
  3553. @@ -1,39 +0,0 @@
  3554. -From: Michal Cieslakiewicz <michal.cieslakiewicz@wp.pl>
  3555. -Date: Sun, 31 Jan 2016 20:45:57 +0100
  3556. -Subject: [PATCH v4 1/8] mac80211: ath9k: enable platform WLAN LED name
  3557. -
  3558. -Enable platform-supplied WLAN LED name for ath9k device. It replaces generic
  3559. -'ath9k-phy*' label with string set during platform initialization.
  3560. -
  3561. -Signed-off-by: Michal Cieslakiewicz <michal.cieslakiewicz@wp.pl>
  3562. ----
  3563. - drivers/net/wireless/ath/ath9k/gpio.c | 10 +++++++---
  3564. - include/linux/ath9k_platform.h | 1 +
  3565. - 2 files changed, 8 insertions(+), 3 deletions(-)
  3566. -
  3567. ---- a/drivers/net/wireless/ath/ath9k/gpio.c
  3568. -+++ b/drivers/net/wireless/ath/ath9k/gpio.c
  3569. -@@ -155,8 +155,11 @@ void ath_init_leds(struct ath_softc *sc)
  3570. -
  3571. - ath_fill_led_pin(sc);
  3572. -
  3573. -- snprintf(led_name, sizeof(led_name), "ath9k-%s",
  3574. -- wiphy_name(sc->hw->wiphy));
  3575. -+ if (pdata && pdata->led_name)
  3576. -+ strncpy(led_name, pdata->led_name, sizeof(led_name));
  3577. -+ else
  3578. -+ snprintf(led_name, sizeof(led_name), "ath9k-%s",
  3579. -+ wiphy_name(sc->hw->wiphy));
  3580. -
  3581. - if (ath9k_led_blink)
  3582. - trigger = sc->led_default_trigger;
  3583. ---- a/include/linux/ath9k_platform.h
  3584. -+++ b/include/linux/ath9k_platform.h
  3585. -@@ -49,6 +49,7 @@ struct ath9k_platform_data {
  3586. -
  3587. - int num_leds;
  3588. - const struct gpio_led *leds;
  3589. -+ const char *led_name;
  3590. - };
  3591. -
  3592. - #endif /* _LINUX_ATH9K_PLATFORM_H */
  3593. diff --git a/package/kernel/mac80211/patches/548-ath9k_enable_gpio_chip.patch b/package/kernel/mac80211/patches/548-ath9k_enable_gpio_chip.patch
  3594. index d4269282d960d857cde3f81d1839359cf3447ff2..31dac29ad77b89626d300d9a82ba3bd2cc2210a1 100644
  3595. --- a/package/kernel/mac80211/patches/548-ath9k_enable_gpio_chip.patch
  3596. +++ b/package/kernel/mac80211/patches/548-ath9k_enable_gpio_chip.patch
  3597. @@ -196,7 +196,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  3598. return 0;
  3599. }
  3600. -@@ -136,12 +264,18 @@ void ath_deinit_leds(struct ath_softc *s
  3601. +@@ -136,17 +264,24 @@ void ath_deinit_leds(struct ath_softc *s
  3602. while (!list_empty(&sc->leds)) {
  3603. led = list_first_entry(&sc->leds, struct ath_led, list);
  3604. @@ -215,18 +215,31 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  3605. }
  3606. void ath_init_leds(struct ath_softc *sc)
  3607. -@@ -158,6 +292,8 @@ void ath_init_leds(struct ath_softc *sc)
  3608. + {
  3609. + struct ath9k_platform_data *pdata = sc->dev->platform_data;
  3610. ++ struct device_node *np = sc->dev->of_node;
  3611. + char led_name[32];
  3612. + const char *trigger;
  3613. + int i;
  3614. +@@ -156,6 +291,15 @@ void ath_init_leds(struct ath_softc *sc)
  3615. + if (AR_SREV_9100(sc->sc_ah))
  3616. + return;
  3617. ++ if (!np)
  3618. ++ ath9k_register_gpio_chip(sc);
  3619. ++
  3620. ++ /* setup gpio controller only if requested and skip the led_pin setup */
  3621. ++ if (of_property_read_bool(np, "gpio-controller")) {
  3622. ++ ath9k_register_gpio_chip(sc);
  3623. ++ return;
  3624. ++ }
  3625. ++
  3626. ath_fill_led_pin(sc);
  3627. -+ ath9k_register_gpio_chip(sc);
  3628. -+
  3629. - if (pdata && pdata->led_name)
  3630. - strncpy(led_name, pdata->led_name, sizeof(led_name));
  3631. - else
  3632. -@@ -178,6 +314,7 @@ void ath_init_leds(struct ath_softc *sc)
  3633. - for (i = 0; i < pdata->num_leds; i++)
  3634. - ath_create_platform_led(sc, &pdata->leds[i]);
  3635. + if (pdata && pdata->leds && pdata->num_leds)
  3636. +@@ -180,6 +324,7 @@ void ath_init_leds(struct ath_softc *sc)
  3637. + ath_create_gpio_led(sc, sc->sc_ah->led_pin, led_name, trigger,
  3638. + !sc->sc_ah->config.led_active_high);
  3639. }
  3640. +
  3641. #endif
  3642. diff --git a/package/kernel/mac80211/patches/549-ath9k_enable_gpio_buttons.patch b/package/kernel/mac80211/patches/549-ath9k_enable_gpio_buttons.patch
  3643. index f40bac93c34660f5d9bb515f79287d768b8d6014..f3fead0a1aef41e05957fda39128b13eaebb9652 100644
  3644. --- a/package/kernel/mac80211/patches/549-ath9k_enable_gpio_buttons.patch
  3645. +++ b/package/kernel/mac80211/patches/549-ath9k_enable_gpio_buttons.patch
  3646. @@ -117,29 +117,20 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  3647. while (!list_empty(&sc->leds)) {
  3648. led = list_first_entry(&sc->leds, struct ath_led, list);
  3649. #ifdef CONFIG_GPIOLIB
  3650. -@@ -293,6 +362,7 @@ void ath_init_leds(struct ath_softc *sc)
  3651. - ath_fill_led_pin(sc);
  3652. +@@ -301,6 +370,7 @@ void ath_init_leds(struct ath_softc *sc)
  3653. + }
  3654. - ath9k_register_gpio_chip(sc);
  3655. + ath_fill_led_pin(sc);
  3656. + ath9k_init_buttons(sc);
  3657. - if (pdata && pdata->led_name)
  3658. - strncpy(led_name, pdata->led_name, sizeof(led_name));
  3659. -@@ -308,7 +378,7 @@ void ath_init_leds(struct ath_softc *sc)
  3660. - ath_create_gpio_led(sc, sc->sc_ah->led_pin, led_name, trigger,
  3661. - !sc->sc_ah->config.led_active_high);
  3662. -
  3663. -- if (!pdata)
  3664. -+ if (!pdata || !pdata->leds || !pdata->num_leds)
  3665. - return;
  3666. -
  3667. - for (i = 0; i < pdata->num_leds; i++)
  3668. + if (pdata && pdata->leds && pdata->num_leds)
  3669. + for (i = 0; i < pdata->num_leds; i++) {
  3670. --- a/include/linux/ath9k_platform.h
  3671. +++ b/include/linux/ath9k_platform.h
  3672. -@@ -50,6 +50,10 @@ struct ath9k_platform_data {
  3673. +@@ -49,6 +49,10 @@ struct ath9k_platform_data {
  3674. +
  3675. int num_leds;
  3676. const struct gpio_led *leds;
  3677. - const char *led_name;
  3678. +
  3679. + unsigned num_btns;
  3680. + const struct gpio_keys_button *btns;
  3681. diff --git a/package/kernel/mac80211/patches/551-ath9k_ubnt_uap_plus_hsr.patch b/package/kernel/mac80211/patches/551-ath9k_ubnt_uap_plus_hsr.patch
  3682. index 45284c71eed616bcaa5c875e85c209fbefc738a5..bcb0026a69afdc52b3bf5ba074418435b343d1be 100644
  3683. --- a/package/kernel/mac80211/patches/551-ath9k_ubnt_uap_plus_hsr.patch
  3684. +++ b/package/kernel/mac80211/patches/551-ath9k_ubnt_uap_plus_hsr.patch
  3685. @@ -375,7 +375,7 @@
  3686. --- a/include/linux/ath9k_platform.h
  3687. +++ b/include/linux/ath9k_platform.h
  3688. -@@ -54,6 +54,8 @@ struct ath9k_platform_data {
  3689. +@@ -53,6 +53,8 @@ struct ath9k_platform_data {
  3690. unsigned num_btns;
  3691. const struct gpio_keys_button *btns;
  3692. unsigned btn_poll_interval;
  3693. diff --git a/package/kernel/mac80211/patches/600-02-rt2x00-rt2800lib-enable-support-for-RT3883.patch b/package/kernel/mac80211/patches/600-02-rt2x00-rt2800lib-enable-support-for-RT3883.patch
  3694. index 2325f37670be46d805d9d5a3deb5b3f8322017aa..dc0f19490e88b0f9aba2fbd9e5b97e3e9b0f299d 100644
  3695. --- a/package/kernel/mac80211/patches/600-02-rt2x00-rt2800lib-enable-support-for-RT3883.patch
  3696. +++ b/package/kernel/mac80211/patches/600-02-rt2x00-rt2800lib-enable-support-for-RT3883.patch
  3697. @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3698. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3699. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3700. -@@ -9379,6 +9379,7 @@ static int rt2800_probe_rt(struct rt2x00
  3701. +@@ -9397,6 +9397,7 @@ static int rt2800_probe_rt(struct rt2x00
  3702. case RT3390:
  3703. case RT3572:
  3704. case RT3593:
  3705. diff --git a/package/kernel/mac80211/patches/600-03-rt2x00-rt2800lib-add-rf_vals-for-RF3853.patch b/package/kernel/mac80211/patches/600-03-rt2x00-rt2800lib-add-rf_vals-for-RF3853.patch
  3706. index 9775664deb94a087315008637d32a1227a5f488e..45fc9645046bd39f039317bfd4dfd5e7b16e6781 100644
  3707. --- a/package/kernel/mac80211/patches/600-03-rt2x00-rt2800lib-add-rf_vals-for-RF3853.patch
  3708. +++ b/package/kernel/mac80211/patches/600-03-rt2x00-rt2800lib-add-rf_vals-for-RF3853.patch
  3709. @@ -31,7 +31,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3710. #define RF5362 0x5362
  3711. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3712. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3713. -@@ -8957,6 +8957,66 @@ static const struct rf_channel rf_vals_3
  3714. +@@ -8975,6 +8975,66 @@ static const struct rf_channel rf_vals_3
  3715. {14, 0xF0, 2, 0x18},
  3716. };
  3717. @@ -98,7 +98,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3718. static const struct rf_channel rf_vals_5592_xtal20[] = {
  3719. /* Channel, N, K, mod, R */
  3720. {1, 482, 4, 10, 3},
  3721. -@@ -9220,6 +9280,11 @@ static int rt2800_probe_hw_mode(struct r
  3722. +@@ -9238,6 +9298,11 @@ static int rt2800_probe_hw_mode(struct r
  3723. spec->channels = rf_vals_3x;
  3724. break;
  3725. diff --git a/package/kernel/mac80211/patches/600-04-rt2x00-rt2800lib-enable-VCO-calibration-for-RF3853.patch b/package/kernel/mac80211/patches/600-04-rt2x00-rt2800lib-enable-VCO-calibration-for-RF3853.patch
  3726. index 5737e015c171d47ff6dc67761de3e7f29080873e..fb32b75d0a63ed0bab62ad8e52b74cde2d6576a4 100644
  3727. --- a/package/kernel/mac80211/patches/600-04-rt2x00-rt2800lib-enable-VCO-calibration-for-RF3853.patch
  3728. +++ b/package/kernel/mac80211/patches/600-04-rt2x00-rt2800lib-enable-VCO-calibration-for-RF3853.patch
  3729. @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3730. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3731. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3732. -@@ -4855,6 +4855,7 @@ void rt2800_vco_calibration(struct rt2x0
  3733. +@@ -4871,6 +4871,7 @@ void rt2800_vco_calibration(struct rt2x0
  3734. case RF3053:
  3735. case RF3070:
  3736. case RF3290:
  3737. @@ -18,7 +18,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3738. case RF5350:
  3739. case RF5360:
  3740. case RF5362:
  3741. -@@ -9402,6 +9403,7 @@ static int rt2800_probe_hw_mode(struct r
  3742. +@@ -9420,6 +9421,7 @@ static int rt2800_probe_hw_mode(struct r
  3743. case RF3053:
  3744. case RF3070:
  3745. case RF3290:
  3746. diff --git a/package/kernel/mac80211/patches/600-05-rt2x00-rt2800lib-add-channel-configuration-function-.patch b/package/kernel/mac80211/patches/600-05-rt2x00-rt2800lib-add-channel-configuration-function-.patch
  3747. index afcb6bdf4a52ab4e941e5bd996a16952935a948e..266a3fba50b15e20ef1f04c7ce32a76ceec51c89 100644
  3748. --- a/package/kernel/mac80211/patches/600-05-rt2x00-rt2800lib-add-channel-configuration-function-.patch
  3749. +++ b/package/kernel/mac80211/patches/600-05-rt2x00-rt2800lib-add-channel-configuration-function-.patch
  3750. @@ -223,7 +223,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3751. #define POWER_BOUND 0x27
  3752. #define POWER_BOUND_5G 0x2b
  3753. -@@ -3565,6 +3770,9 @@ static void rt2800_config_channel(struct
  3754. +@@ -3567,6 +3772,9 @@ static void rt2800_config_channel(struct
  3755. case RF3322:
  3756. rt2800_config_channel_rf3322(rt2x00dev, conf, rf, info);
  3757. break;
  3758. diff --git a/package/kernel/mac80211/patches/600-06-rt2x00-rt2800lib-enable-RF3853-support.patch b/package/kernel/mac80211/patches/600-06-rt2x00-rt2800lib-enable-RF3853-support.patch
  3759. index 95790165955d06913499f3b583ac90da60a0445f..53e6bbb15512dca668782e079abcd3860b22f1d5 100644
  3760. --- a/package/kernel/mac80211/patches/600-06-rt2x00-rt2800lib-enable-RF3853-support.patch
  3761. +++ b/package/kernel/mac80211/patches/600-06-rt2x00-rt2800lib-enable-RF3853-support.patch
  3762. @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3763. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3764. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3765. -@@ -8882,6 +8882,7 @@ static int rt2800_init_eeprom(struct rt2
  3766. +@@ -8900,6 +8900,7 @@ static int rt2800_init_eeprom(struct rt2
  3767. case RF3290:
  3768. case RF3320:
  3769. case RF3322:
  3770. diff --git a/package/kernel/mac80211/patches/600-07-rt2x00-rt2800lib-add-MAC-register-initialization-for.patch b/package/kernel/mac80211/patches/600-07-rt2x00-rt2800lib-add-MAC-register-initialization-for.patch
  3771. index 08b54f67269888abeb9f6ee59b8885966fb116f3..cfa95e56bc949f4bf8c3a05eacada49bcc89abff 100644
  3772. --- a/package/kernel/mac80211/patches/600-07-rt2x00-rt2800lib-add-MAC-register-initialization-for.patch
  3773. +++ b/package/kernel/mac80211/patches/600-07-rt2x00-rt2800lib-add-MAC-register-initialization-for.patch
  3774. @@ -35,7 +35,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3775. #define RX_FILTER_CFG 0x1400
  3776. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3777. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3778. -@@ -5485,6 +5485,12 @@ static int rt2800_init_registers(struct
  3779. +@@ -5501,6 +5501,12 @@ static int rt2800_init_registers(struct
  3780. rt2800_register_write(rt2x00dev, TX_SW_CFG2,
  3781. 0x00000000);
  3782. }
  3783. @@ -48,7 +48,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3784. } else if (rt2x00_rt(rt2x00dev, RT5390) ||
  3785. rt2x00_rt(rt2x00dev, RT5392) ||
  3786. rt2x00_rt(rt2x00dev, RT6352)) {
  3787. -@@ -5698,6 +5704,11 @@ static int rt2800_init_registers(struct
  3788. +@@ -5714,6 +5720,11 @@ static int rt2800_init_registers(struct
  3789. reg = rt2x00_rt(rt2x00dev, RT5592) ? 0x00000082 : 0x00000002;
  3790. rt2800_register_write(rt2x00dev, TXOP_HLDR_ET, reg);
  3791. diff --git a/package/kernel/mac80211/patches/600-09-rt2x00-rt2800lib-add-BBP-register-initialization-for.patch b/package/kernel/mac80211/patches/600-09-rt2x00-rt2800lib-add-BBP-register-initialization-for.patch
  3792. index ced3645aef4d6df5cc3fba2c444188dc8c92b1f3..6adb9e1cd24a2a1b3e6dfbb63ff7b6cff79fa2e0 100644
  3793. --- a/package/kernel/mac80211/patches/600-09-rt2x00-rt2800lib-add-BBP-register-initialization-for.patch
  3794. +++ b/package/kernel/mac80211/patches/600-09-rt2x00-rt2800lib-add-BBP-register-initialization-for.patch
  3795. @@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3796. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3797. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3798. -@@ -6325,6 +6325,47 @@ static void rt2800_init_bbp_3593(struct
  3799. +@@ -6341,6 +6341,47 @@ static void rt2800_init_bbp_3593(struct
  3800. rt2800_bbp_write(rt2x00dev, 103, 0xc0);
  3801. }
  3802. @@ -59,7 +59,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3803. static void rt2800_init_bbp_53xx(struct rt2x00_dev *rt2x00dev)
  3804. {
  3805. int ant, div_mode;
  3806. -@@ -6769,6 +6810,9 @@ static void rt2800_init_bbp(struct rt2x0
  3807. +@@ -6785,6 +6826,9 @@ static void rt2800_init_bbp(struct rt2x0
  3808. case RT3593:
  3809. rt2800_init_bbp_3593(rt2x00dev);
  3810. return;
  3811. diff --git a/package/kernel/mac80211/patches/600-10-rt2x00-rt2800lib-add-RFCSR-initialization-for-RT3883.patch b/package/kernel/mac80211/patches/600-10-rt2x00-rt2800lib-add-RFCSR-initialization-for-RT3883.patch
  3812. index 08e4ffe9ba47893180a23755b132b262932e423d..aa3ead6ee8a397ec6c279e600d841eb3fcb4a863 100644
  3813. --- a/package/kernel/mac80211/patches/600-10-rt2x00-rt2800lib-add-RFCSR-initialization-for-RT3883.patch
  3814. +++ b/package/kernel/mac80211/patches/600-10-rt2x00-rt2800lib-add-RFCSR-initialization-for-RT3883.patch
  3815. @@ -21,7 +21,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3816. #define RFCSR2_TX2_EN_MT7620 FIELD8(0x20)
  3817. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3818. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3819. -@@ -7685,6 +7685,144 @@ static void rt2800_init_rfcsr_5350(struc
  3820. +@@ -7701,6 +7701,144 @@ static void rt2800_init_rfcsr_5350(struc
  3821. rt2800_rfcsr_write(rt2x00dev, 63, 0x00);
  3822. }
  3823. @@ -166,7 +166,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3824. static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev)
  3825. {
  3826. rt2800_rf_init_calibration(rt2x00dev, 2);
  3827. -@@ -8525,6 +8663,9 @@ static void rt2800_init_rfcsr(struct rt2
  3828. +@@ -8543,6 +8681,9 @@ static void rt2800_init_rfcsr(struct rt2
  3829. case RT3390:
  3830. rt2800_init_rfcsr_3390(rt2x00dev);
  3831. break;
  3832. diff --git a/package/kernel/mac80211/patches/600-12-rt2x00-rt2800lib-force-rf-type-to-RF3853-on-RT3883.patch b/package/kernel/mac80211/patches/600-12-rt2x00-rt2800lib-force-rf-type-to-RF3853-on-RT3883.patch
  3833. index c03527b4f704c87f1544b6fb6cd894abe9b1f83e..0ac7b040ec81742d32275b7e85ae5f729a61d798 100644
  3834. --- a/package/kernel/mac80211/patches/600-12-rt2x00-rt2800lib-force-rf-type-to-RF3853-on-RT3883.patch
  3835. +++ b/package/kernel/mac80211/patches/600-12-rt2x00-rt2800lib-force-rf-type-to-RF3853-on-RT3883.patch
  3836. @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3837. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3838. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3839. -@@ -9059,6 +9059,8 @@ static int rt2800_init_eeprom(struct rt2
  3840. +@@ -9077,6 +9077,8 @@ static int rt2800_init_eeprom(struct rt2
  3841. rt2800_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf);
  3842. else if (rt2x00_rt(rt2x00dev, RT3352))
  3843. rf = RF3322;
  3844. diff --git a/package/kernel/mac80211/patches/600-13-rt2x00-rt2800lib-add-channel-configuration-code-for-.patch b/package/kernel/mac80211/patches/600-13-rt2x00-rt2800lib-add-channel-configuration-code-for-.patch
  3845. index 04574db7c18c77ec7e6354ea597a974661bd449a..dc34a96d99c9ab1b214a6dfada39404023fabb5e 100644
  3846. --- a/package/kernel/mac80211/patches/600-13-rt2x00-rt2800lib-add-channel-configuration-code-for-.patch
  3847. +++ b/package/kernel/mac80211/patches/600-13-rt2x00-rt2800lib-add-channel-configuration-code-for-.patch
  3848. @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3849. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3850. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3851. -@@ -3733,6 +3733,36 @@ static char rt2800_txpower_to_dev(struct
  3852. +@@ -3735,6 +3735,36 @@ static char rt2800_txpower_to_dev(struct
  3853. return clamp_t(char, txpower, MIN_A_TXPOWER, MAX_A_TXPOWER);
  3854. }
  3855. @@ -47,7 +47,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3856. static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
  3857. struct ieee80211_conf *conf,
  3858. struct rf_channel *rf,
  3859. -@@ -3751,6 +3781,12 @@ static void rt2800_config_channel(struct
  3860. +@@ -3753,6 +3783,12 @@ static void rt2800_config_channel(struct
  3861. rt2800_txpower_to_dev(rt2x00dev, rf->channel,
  3862. info->default_power3);
  3863. @@ -60,7 +60,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3864. switch (rt2x00dev->chip.rf) {
  3865. case RF2020:
  3866. case RF3020:
  3867. -@@ -3855,6 +3891,15 @@ static void rt2800_config_channel(struct
  3868. +@@ -3857,6 +3893,15 @@ static void rt2800_config_channel(struct
  3869. rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain);
  3870. rt2800_bbp_write(rt2x00dev, 64, 0x37 - rt2x00dev->lna_gain);
  3871. rt2800_bbp_write(rt2x00dev, 77, 0x98);
  3872. @@ -76,7 +76,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3873. } else {
  3874. rt2800_bbp_write(rt2x00dev, 62, 0x37 - rt2x00dev->lna_gain);
  3875. rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain);
  3876. -@@ -3868,6 +3913,7 @@ static void rt2800_config_channel(struct
  3877. +@@ -3870,6 +3915,7 @@ static void rt2800_config_channel(struct
  3878. !rt2x00_rt(rt2x00dev, RT6352)) {
  3879. if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
  3880. rt2800_bbp_write(rt2x00dev, 82, 0x62);
  3881. @@ -84,7 +84,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3882. rt2800_bbp_write(rt2x00dev, 75, 0x46);
  3883. } else {
  3884. if (rt2x00_rt(rt2x00dev, RT3593))
  3885. -@@ -3876,19 +3922,22 @@ static void rt2800_config_channel(struct
  3886. +@@ -3878,19 +3924,22 @@ static void rt2800_config_channel(struct
  3887. rt2800_bbp_write(rt2x00dev, 82, 0x84);
  3888. rt2800_bbp_write(rt2x00dev, 75, 0x50);
  3889. }
  3890. @@ -110,7 +110,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3891. rt2800_bbp_write(rt2x00dev, 83, 0x9a);
  3892. if (rt2x00_has_cap_external_lna_a(rt2x00dev))
  3893. -@@ -4011,6 +4060,23 @@ static void rt2800_config_channel(struct
  3894. +@@ -4013,6 +4062,23 @@ static void rt2800_config_channel(struct
  3895. rt2800_bbp_write_with_rx_chain(rt2x00dev, 66, reg);
  3896. diff --git a/package/kernel/mac80211/patches/600-14-rt2x00-rt2800lib-fix-txpower_to_dev-function-for-RT3.patch b/package/kernel/mac80211/patches/600-14-rt2x00-rt2800lib-fix-txpower_to_dev-function-for-RT3.patch
  3897. index 3412a3e1334438c45e3780ffac395c6ef041e84f..e93d2dd96f92a23158aeb572642767aeacd22eee 100644
  3898. --- a/package/kernel/mac80211/patches/600-14-rt2x00-rt2800lib-fix-txpower_to_dev-function-for-RT3.patch
  3899. +++ b/package/kernel/mac80211/patches/600-14-rt2x00-rt2800lib-fix-txpower_to_dev-function-for-RT3.patch
  3900. @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3901. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3902. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3903. -@@ -3720,13 +3720,15 @@ static char rt2800_txpower_to_dev(struct
  3904. +@@ -3722,13 +3722,15 @@ static char rt2800_txpower_to_dev(struct
  3905. unsigned int channel,
  3906. char txpower)
  3907. {
  3908. diff --git a/package/kernel/mac80211/patches/600-15-rt2x00-rt2800lib-use-correct-txpower-calculation-fun.patch b/package/kernel/mac80211/patches/600-15-rt2x00-rt2800lib-use-correct-txpower-calculation-fun.patch
  3909. index 8d1df8cf77ad955c40ac07bd2c6e7294dc40158d..463346eec4804602a12b399144f91893403e54ec 100644
  3910. --- a/package/kernel/mac80211/patches/600-15-rt2x00-rt2800lib-use-correct-txpower-calculation-fun.patch
  3911. +++ b/package/kernel/mac80211/patches/600-15-rt2x00-rt2800lib-use-correct-txpower-calculation-fun.patch
  3912. @@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3913. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3914. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3915. -@@ -5085,7 +5085,8 @@ static void rt2800_config_txpower(struct
  3916. +@@ -5101,7 +5101,8 @@ static void rt2800_config_txpower(struct
  3917. struct ieee80211_channel *chan,
  3918. int power_level)
  3919. {
  3920. diff --git a/package/kernel/mac80211/patches/600-16-rt2x00-rt2800lib-hardcode-txmixer-gain-values-to-zer.patch b/package/kernel/mac80211/patches/600-16-rt2x00-rt2800lib-hardcode-txmixer-gain-values-to-zer.patch
  3921. index 9aeb41fe6b167623872cfd6afa06dd8fb7ee2fee..3efac122463b89baa49750942385144fd21ed691 100644
  3922. --- a/package/kernel/mac80211/patches/600-16-rt2x00-rt2800lib-hardcode-txmixer-gain-values-to-zer.patch
  3923. +++ b/package/kernel/mac80211/patches/600-16-rt2x00-rt2800lib-hardcode-txmixer-gain-values-to-zer.patch
  3924. @@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3925. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3926. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3927. -@@ -8941,7 +8941,8 @@ static u8 rt2800_get_txmixer_gain_24g(st
  3928. +@@ -8959,7 +8959,8 @@ static u8 rt2800_get_txmixer_gain_24g(st
  3929. {
  3930. u16 word;
  3931. @@ -21,7 +21,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3932. return 0;
  3933. rt2800_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_BG, &word);
  3934. -@@ -8955,7 +8956,8 @@ static u8 rt2800_get_txmixer_gain_5g(str
  3935. +@@ -8973,7 +8974,8 @@ static u8 rt2800_get_txmixer_gain_5g(str
  3936. {
  3937. u16 word;
  3938. diff --git a/package/kernel/mac80211/patches/600-20-rt2x00-rt2800lib-fix-VGC-setup-for-RT3883.patch b/package/kernel/mac80211/patches/600-20-rt2x00-rt2800lib-fix-VGC-setup-for-RT3883.patch
  3939. index 70c33a1d20431dbc388e39e20501067405c04eea..8c563b89389fcd00d55e916543405a57574f7c7c 100644
  3940. --- a/package/kernel/mac80211/patches/600-20-rt2x00-rt2800lib-fix-VGC-setup-for-RT3883.patch
  3941. +++ b/package/kernel/mac80211/patches/600-20-rt2x00-rt2800lib-fix-VGC-setup-for-RT3883.patch
  3942. @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3943. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3944. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3945. -@@ -5338,7 +5338,8 @@ static u8 rt2800_get_default_vgc(struct
  3946. +@@ -5354,7 +5354,8 @@ static u8 rt2800_get_default_vgc(struct
  3947. else
  3948. vgc = 0x2e + rt2x00dev->lna_gain;
  3949. } else { /* 5GHZ band */
  3950. @@ -20,7 +20,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3951. vgc = 0x20 + (rt2x00dev->lna_gain * 5) / 3;
  3952. else if (rt2x00_rt(rt2x00dev, RT5592))
  3953. vgc = 0x24 + (2 * rt2x00dev->lna_gain);
  3954. -@@ -5358,7 +5359,8 @@ static inline void rt2800_set_vgc(struct
  3955. +@@ -5374,7 +5375,8 @@ static inline void rt2800_set_vgc(struct
  3956. {
  3957. if (qual->vgc_level != vgc_level) {
  3958. if (rt2x00_rt(rt2x00dev, RT3572) ||
  3959. @@ -30,7 +30,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3960. rt2800_bbp_write_with_rx_chain(rt2x00dev, 66,
  3961. vgc_level);
  3962. } else if (rt2x00_rt(rt2x00dev, RT5592)) {
  3963. -@@ -5405,6 +5407,11 @@ void rt2800_link_tuner(struct rt2x00_dev
  3964. +@@ -5421,6 +5423,11 @@ void rt2800_link_tuner(struct rt2x00_dev
  3965. }
  3966. break;
  3967. diff --git a/package/kernel/mac80211/patches/600-21-rt2x00-rt2800lib-fix-EEPROM-LNA-validation-for-RT388.patch b/package/kernel/mac80211/patches/600-21-rt2x00-rt2800lib-fix-EEPROM-LNA-validation-for-RT388.patch
  3968. index a2cfd896ebcf45bc8066c340a0b4833bd3c62d53..6e9ef1071cfa6ca73fd6bf68e2a8377311888dee 100644
  3969. --- a/package/kernel/mac80211/patches/600-21-rt2x00-rt2800lib-fix-EEPROM-LNA-validation-for-RT388.patch
  3970. +++ b/package/kernel/mac80211/patches/600-21-rt2x00-rt2800lib-fix-EEPROM-LNA-validation-for-RT388.patch
  3971. @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3972. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3973. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  3974. -@@ -9074,7 +9074,8 @@ static int rt2800_validate_eeprom(struct
  3975. +@@ -9092,7 +9092,8 @@ static int rt2800_validate_eeprom(struct
  3976. rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &word);
  3977. if (abs(rt2x00_get_field16(word, EEPROM_RSSI_BG2_OFFSET2)) > 10)
  3978. rt2x00_set_field16(&word, EEPROM_RSSI_BG2_OFFSET2, 0);
  3979. @@ -20,7 +20,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3980. if (rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0x00 ||
  3981. rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0xff)
  3982. rt2x00_set_field16(&word, EEPROM_RSSI_BG2_LNA_A1,
  3983. -@@ -9094,7 +9095,8 @@ static int rt2800_validate_eeprom(struct
  3984. +@@ -9112,7 +9113,8 @@ static int rt2800_validate_eeprom(struct
  3985. rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &word);
  3986. if (abs(rt2x00_get_field16(word, EEPROM_RSSI_A2_OFFSET2)) > 10)
  3987. rt2x00_set_field16(&word, EEPROM_RSSI_A2_OFFSET2, 0);
  3988. @@ -30,7 +30,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  3989. if (rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0x00 ||
  3990. rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0xff)
  3991. rt2x00_set_field16(&word, EEPROM_RSSI_A2_LNA_A2,
  3992. -@@ -9102,7 +9104,8 @@ static int rt2800_validate_eeprom(struct
  3993. +@@ -9120,7 +9122,8 @@ static int rt2800_validate_eeprom(struct
  3994. }
  3995. rt2800_eeprom_write(rt2x00dev, EEPROM_RSSI_A2, word);
  3996. diff --git a/package/kernel/mac80211/patches/600-22-rt2x00-rt2800lib-fix-txpower-compensation-for-RT3883.patch b/package/kernel/mac80211/patches/600-22-rt2x00-rt2800lib-fix-txpower-compensation-for-RT3883.patch
  3997. index ac8b219efdfa66ee01562653c15365f7504097e1..1a8ccbc9bda98f433e03d459031027f30efbca7c 100644
  3998. --- a/package/kernel/mac80211/patches/600-22-rt2x00-rt2800lib-fix-txpower-compensation-for-RT3883.patch
  3999. +++ b/package/kernel/mac80211/patches/600-22-rt2x00-rt2800lib-fix-txpower-compensation-for-RT3883.patch
  4000. @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  4001. --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  4002. +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  4003. -@@ -4332,6 +4332,9 @@ static u8 rt2800_compensate_txpower(stru
  4004. +@@ -4348,6 +4348,9 @@ static u8 rt2800_compensate_txpower(stru
  4005. if (rt2x00_rt(rt2x00dev, RT3593))
  4006. return min_t(u8, txpower, 0xc);
  4007. diff --git a/package/kernel/mac80211/patches/610-rt2x00-change-led-polarity-from-OF.patch b/package/kernel/mac80211/patches/610-rt2x00-change-led-polarity-from-OF.patch
  4008. index 0236683d5f3c1eb723a1665c4d052f9bc841841e..51890e0a3bd7acd3eee965525a2ab40806fb4f34 100644
  4009. --- a/package/kernel/mac80211/patches/610-rt2x00-change-led-polarity-from-OF.patch
  4010. +++ b/package/kernel/mac80211/patches/610-rt2x00-change-led-polarity-from-OF.patch
  4011. @@ -8,7 +8,7 @@
  4012. #include "rt2x00.h"
  4013. #include "rt2800lib.h"
  4014. -@@ -9261,6 +9262,17 @@ static int rt2800_init_eeprom(struct rt2
  4015. +@@ -9279,6 +9280,17 @@ static int rt2800_init_eeprom(struct rt2
  4016. rt2800_init_led(rt2x00dev, &rt2x00dev->led_assoc, LED_TYPE_ASSOC);
  4017. rt2800_init_led(rt2x00dev, &rt2x00dev->led_qual, LED_TYPE_QUALITY);
  4018. diff --git a/package/kernel/mac80211/patches/650-rt2x00-add-support-for-external-PA-on-MT7620.patch b/package/kernel/mac80211/patches/650-rt2x00-add-support-for-external-PA-on-MT7620.patch
  4019. new file mode 100644
  4020. index 0000000000000000000000000000000000000000..64a62f4b0792168fb60e3f33b20d0f8a751aa911
  4021. --- /dev/null
  4022. +++ b/package/kernel/mac80211/patches/650-rt2x00-add-support-for-external-PA-on-MT7620.patch
  4023. @@ -0,0 +1,118 @@
  4024. +From 9782a7f7488443568fa4d6088b73c9aff7eb8510 Mon Sep 17 00:00:00 2001
  4025. +From: Daniel Golle <daniel@makrotopia.org>
  4026. +Date: Wed, 19 Apr 2017 16:14:53 +0200
  4027. +Subject: [PATCH] rt2x00: add support for external PA on MT7620
  4028. +To: Stanislaw Gruszka <sgruszka@redhat.com>
  4029. +Cc: Helmut Schaa <helmut.schaa@googlemail.com>,
  4030. + linux-wireless@vger.kernel.org,
  4031. + Kalle Valo <kvalo@codeaurora.org>
  4032. +
  4033. +Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  4034. +---
  4035. + drivers/net/wireless/ralink/rt2x00/rt2800.h | 1 +
  4036. + drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 70 +++++++++++++++++++++++++-
  4037. + 2 files changed, 70 insertions(+), 1 deletion(-)
  4038. +
  4039. +--- a/drivers/net/wireless/ralink/rt2x00/rt2800.h
  4040. ++++ b/drivers/net/wireless/ralink/rt2x00/rt2800.h
  4041. +@@ -2749,6 +2749,7 @@ enum rt2800_eeprom_word {
  4042. + #define EEPROM_NIC_CONF2_RX_STREAM FIELD16(0x000f)
  4043. + #define EEPROM_NIC_CONF2_TX_STREAM FIELD16(0x00f0)
  4044. + #define EEPROM_NIC_CONF2_CRYSTAL FIELD16(0x0600)
  4045. ++#define EEPROM_NIC_CONF2_EXTERNAL_PA FIELD16(0xc000)
  4046. +
  4047. + /*
  4048. + * EEPROM LNA
  4049. +--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  4050. ++++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  4051. +@@ -4114,6 +4114,61 @@ static void rt2800_config_channel(struct
  4052. + rt2800_iq_calibrate(rt2x00dev, rf->channel);
  4053. + }
  4054. +
  4055. ++ if (rt2x00_rt(rt2x00dev, RT6352)) {
  4056. ++ if (test_bit(CAPABILITY_EXTERNAL_PA_TX0,
  4057. ++ &rt2x00dev->cap_flags)) {
  4058. ++ rt2x00_warn(rt2x00dev, "Using incomplete support for " \
  4059. ++ "external PA\n");
  4060. ++ rt2800_register_read(rt2x00dev, RF_CONTROL3, &reg);
  4061. ++ reg |= 0x00000101;
  4062. ++ rt2800_register_write(rt2x00dev, RF_CONTROL3, reg);
  4063. ++
  4064. ++ rt2800_register_read(rt2x00dev, RF_BYPASS3, &reg);
  4065. ++ reg |= 0x00000101;
  4066. ++ rt2800_register_write(rt2x00dev, RF_BYPASS3, reg);
  4067. ++
  4068. ++ rt2800_rfcsr_write_bank(rt2x00dev, 4, 43, 0x73);
  4069. ++ rt2800_rfcsr_write_bank(rt2x00dev, 6, 43, 0x73);
  4070. ++ rt2800_rfcsr_write_bank(rt2x00dev, 4, 44, 0x73);
  4071. ++ rt2800_rfcsr_write_bank(rt2x00dev, 6, 44, 0x73);
  4072. ++ rt2800_rfcsr_write_bank(rt2x00dev, 4, 45, 0x73);
  4073. ++ rt2800_rfcsr_write_bank(rt2x00dev, 6, 45, 0x73);
  4074. ++ rt2800_rfcsr_write_bank(rt2x00dev, 4, 46, 0x27);
  4075. ++ rt2800_rfcsr_write_bank(rt2x00dev, 6, 46, 0x27);
  4076. ++ rt2800_rfcsr_write_bank(rt2x00dev, 4, 47, 0xC8);
  4077. ++ rt2800_rfcsr_write_bank(rt2x00dev, 6, 47, 0xC8);
  4078. ++ rt2800_rfcsr_write_bank(rt2x00dev, 4, 48, 0xA4);
  4079. ++ rt2800_rfcsr_write_bank(rt2x00dev, 6, 48, 0xA4);
  4080. ++ rt2800_rfcsr_write_bank(rt2x00dev, 4, 49, 0x05);
  4081. ++ rt2800_rfcsr_write_bank(rt2x00dev, 6, 49, 0x05);
  4082. ++ rt2800_rfcsr_write_bank(rt2x00dev, 4, 54, 0x27);
  4083. ++ rt2800_rfcsr_write_bank(rt2x00dev, 6, 54, 0x27);
  4084. ++ rt2800_rfcsr_write_bank(rt2x00dev, 4, 55, 0xC8);
  4085. ++ rt2800_rfcsr_write_bank(rt2x00dev, 6, 55, 0xC8);
  4086. ++ rt2800_rfcsr_write_bank(rt2x00dev, 4, 56, 0xA4);
  4087. ++ rt2800_rfcsr_write_bank(rt2x00dev, 6, 56, 0xA4);
  4088. ++ rt2800_rfcsr_write_bank(rt2x00dev, 4, 57, 0x05);
  4089. ++ rt2800_rfcsr_write_bank(rt2x00dev, 6, 57, 0x05);
  4090. ++ rt2800_rfcsr_write_bank(rt2x00dev, 4, 58, 0x27);
  4091. ++ rt2800_rfcsr_write_bank(rt2x00dev, 6, 58, 0x27);
  4092. ++ rt2800_rfcsr_write_bank(rt2x00dev, 4, 59, 0xC8);
  4093. ++ rt2800_rfcsr_write_bank(rt2x00dev, 6, 59, 0xC8);
  4094. ++ rt2800_rfcsr_write_bank(rt2x00dev, 4, 60, 0xA4);
  4095. ++ rt2800_rfcsr_write_bank(rt2x00dev, 6, 60, 0xA4);
  4096. ++ rt2800_rfcsr_write_bank(rt2x00dev, 4, 61, 0x05);
  4097. ++ rt2800_rfcsr_write_bank(rt2x00dev, 6, 61, 0x05);
  4098. ++ rt2800_rfcsr_write_bank(rt2x00dev, 5, 05, 0x00);
  4099. ++ rt2800_rfcsr_write_bank(rt2x00dev, 7, 05, 0x00);
  4100. ++
  4101. ++ rt2800_register_write(rt2x00dev, TX0_RF_GAIN_CORRECT,
  4102. ++ 0x36303636);
  4103. ++ rt2800_register_write(rt2x00dev, TX0_RF_GAIN_ATTEN,
  4104. ++ 0x6C6C6B6C);
  4105. ++ rt2800_register_write(rt2x00dev, TX1_RF_GAIN_ATTEN,
  4106. ++ 0x6C6C6B6C);
  4107. ++ }
  4108. ++ }
  4109. ++
  4110. + rt2800_bbp_read(rt2x00dev, 4, &bbp);
  4111. + rt2x00_set_field8(&bbp, BBP4_BANDWIDTH, 2 * conf_is_ht40(conf));
  4112. + rt2800_bbp_write(rt2x00dev, 4, bbp);
  4113. +@@ -9308,7 +9363,8 @@ static int rt2800_init_eeprom(struct rt2
  4114. + */
  4115. + rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom);
  4116. +
  4117. +- if (rt2x00_rt(rt2x00dev, RT3352)) {
  4118. ++ if (rt2x00_rt(rt2x00dev, RT3352) ||
  4119. ++ rt2x00_rt(rt2x00dev, RT6352)) {
  4120. + if (rt2x00_get_field16(eeprom,
  4121. + EEPROM_NIC_CONF1_EXTERNAL_TX0_PA_3352))
  4122. + __set_bit(CAPABILITY_EXTERNAL_PA_TX0,
  4123. +@@ -9319,6 +9375,18 @@ static int rt2800_init_eeprom(struct rt2
  4124. + &rt2x00dev->cap_flags);
  4125. + }
  4126. +
  4127. ++ rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF2, &eeprom);
  4128. ++
  4129. ++ if (rt2x00_rt(rt2x00dev, RT6352) && eeprom != 0 && eeprom != 0xffff) {
  4130. ++ if (rt2x00_get_field16(eeprom,
  4131. ++ EEPROM_NIC_CONF2_EXTERNAL_PA)) {
  4132. ++ __set_bit(CAPABILITY_EXTERNAL_PA_TX0,
  4133. ++ &rt2x00dev->cap_flags);
  4134. ++ __set_bit(CAPABILITY_EXTERNAL_PA_TX1,
  4135. ++ &rt2x00dev->cap_flags);
  4136. ++ }
  4137. ++ }
  4138. ++
  4139. + return 0;
  4140. + }
  4141. +
  4142. diff --git a/package/kernel/mac80211/patches/651-rt2x00-remove-unneccesary-code.patch b/package/kernel/mac80211/patches/651-rt2x00-remove-unneccesary-code.patch
  4143. new file mode 100644
  4144. index 0000000000000000000000000000000000000000..b65bd7a73e493a52acb52947462565a9ec43c788
  4145. --- /dev/null
  4146. +++ b/package/kernel/mac80211/patches/651-rt2x00-remove-unneccesary-code.patch
  4147. @@ -0,0 +1,132 @@
  4148. +From pozega.tomislav@gmail.com Thu May 18 12:42:27 2017
  4149. +Return-path: <pozega.tomislav@gmail.com>
  4150. +Envelope-to: daniel@makrotopia.org
  4151. +Delivery-date: Thu, 18 May 2017 12:42:27 +0200
  4152. +Received: from mail by fudo.makrotopia.org with sa-checked (Exim 4.88)
  4153. + (envelope-from <pozega.tomislav@gmail.com>)
  4154. + id 1dBIsy-00088b-PU
  4155. + for daniel@makrotopia.org; Thu, 18 May 2017 12:42:27 +0200
  4156. +X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on fudo.makrotopia.org
  4157. +X-Spam-Level:
  4158. +X-Spam-Status: No, score=-0.8 required=2.5 tests=DKIM_SIGNED,DKIM_VALID,
  4159. + DKIM_VALID_AU,FREEMAIL_FROM,HTML_MESSAGE,RCVD_IN_DNSWL_LOW shortcircuit=no
  4160. + autolearn=ham autolearn_force=no version=3.4.1
  4161. +Received: from mail-oi0-x22a.google.com ([2607:f8b0:4003:c06::22a])
  4162. + by fudo.makrotopia.org with esmtps (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128)
  4163. + (Exim 4.88)
  4164. + (envelope-from <pozega.tomislav@gmail.com>)
  4165. + id 1dBIsv-00088Q-Dq
  4166. + for daniel@makrotopia.org; Thu, 18 May 2017 12:42:24 +0200
  4167. +Received: by mail-oi0-x22a.google.com with SMTP id w10so48782189oif.0
  4168. + for <daniel@makrotopia.org>; Thu, 18 May 2017 03:42:21 -0700 (PDT)
  4169. +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
  4170. + d=gmail.com; s=20161025;
  4171. + h=mime-version:from:date:message-id:subject:to;
  4172. + bh=9dF7PHDassYY74+N6dAhmsL/B9i5oG3SEuMzHuazhJo=;
  4173. + b=cBGJ44v+o4ASyCPmHCBRMmRYnJCv4Gx6lzDiScKn0XqYmNHYpZTPg5cAY1GZFUhHdz
  4174. + 9QT5fzhJKFikBliSuJc/7/pI8KzvyEAdvawiWA7/5fbeiTZ+zjJnzRVGezqkYDKxjR6u
  4175. + 7TsoJxR2/oFwo7bOFlThhee+Nwf7qaX8AVal7JdkqovekX79JQ5vsKAa4LapDp7Cl0wr
  4176. + KCh0WRUHGEgpTLJFyQ3ThPmLqc8bhmu+6/V/LJ53VOY7uksZHMhvaKkk9vDCoOuPnBMK
  4177. + Cj2/c7z9RTErz/xlHg6HxnBe/pPc31XUsuPJUleOEdZASczPsreEEKacKCONVlP1wjAB
  4178. + iOkA==
  4179. +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
  4180. + d=1e100.net; s=20161025;
  4181. + h=x-gm-message-state:mime-version:from:date:message-id:subject:to;
  4182. + bh=9dF7PHDassYY74+N6dAhmsL/B9i5oG3SEuMzHuazhJo=;
  4183. + b=LJAe4ZwS9aNJypROW7j+I9aNfRBWyDYy0c8ABnDbLrIoF9P2AA/Vs/Cli5f7GjaAxr
  4184. + 1JCx602ach+7R7QjQq/nqNmLuhRCfSvB0TGrq4R4v+CJ4ADO541+PddnFiU1dlIXQRP2
  4185. + TE2FOydSO0FGJBMg+kY0eFiidBtYj1T5x7IHAhQzufiuiF6/1xZS8h61CYJjLzt/aR5y
  4186. + JxOxsVvu3W2YQ0T5wKmAPlKtarFH6ZZgs446bRYt1MX5KAWzIoBM1+IPMMv7lSCpCaDR
  4187. + fwH05aDyaJW2IzXH5R9Tq7gGYycYjx/SnO7JupJXJVvOzKgBJxp60JwJhCfqCwESDuuD
  4188. + 8nNA==
  4189. +X-Gm-Message-State: AODbwcDOpdFZgbxAxFsVsqFdCBN3pRGDvEclZ1heVg2byNZ9BuG5kqJg
  4190. + GvZ9x4NGt0v8lVGa3esDw0N1KiJENg==
  4191. +X-Received: by 10.157.17.217 with SMTP id y25mr1310632oty.137.1495104134863;
  4192. + Thu, 18 May 2017 03:42:14 -0700 (PDT)
  4193. +MIME-Version: 1.0
  4194. +Received: by 10.157.0.105 with HTTP; Thu, 18 May 2017 03:42:14 -0700 (PDT)
  4195. +From: Tom Psyborg <pozega.tomislav@gmail.com>
  4196. +Date: Thu, 18 May 2017 12:42:14 +0200
  4197. +Message-ID: <CAKR_QVJBSKw2uCY4RbHZPvbGkMcvnBh+j6F+9t93mG3BakjX3Q@mail.gmail.com>
  4198. +Subject: [PATCH] rt2x00: remove unneccesary code
  4199. +To: linux-wireless <linux-wireless@vger.kernel.org>,
  4200. + Linux Kernel Mailing List <linux-kernel@vger.kernel.org>, Arnd Bergmann <arnd@arndb.de>,
  4201. + Jes Sorensen <jes.sorensen@gmail.com>, Stanislaw Gruszka <sgruszka@redhat.com>,
  4202. + David Miller <davem@davemloft.net>, Helmut Schaa <helmut.schaa@googlemail.com>,
  4203. + Kalle Valo <kvalo@codeaurora.org>, Daniel Golle <daniel@makrotopia.org>,
  4204. + Mathias Kresin <dev@kresin.me>, Johannes Berg <johannes.berg@intel.com>,
  4205. + Serge Vasilugin <vasilugin@yandex.ru>, Roman Yeryomin <roman@advem.lv>,
  4206. + Networking <netdev@vger.kernel.org>
  4207. +Content-Type: multipart/alternative; boundary="94eb2c1905d2dc6361054fca0e62"
  4208. +Status: RO
  4209. +Content-Length: 11079
  4210. +Lines: 178
  4211. +
  4212. +--94eb2c1905d2dc6361054fca0e62
  4213. +Content-Type: text/plain; charset="UTF-8"
  4214. +Content-Transfer-Encoding: quoted-printable
  4215. +
  4216. +Use chanreg and dccal helpers to reduce the size of ePA code.
  4217. +
  4218. +Signed-off-by: Tomislav Po=C5=BEega <pozega.tomislav@gmail.com>
  4219. +Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  4220. +[daniel@makrotopia.org: fixed white-space so patch applies]
  4221. +---
  4222. +
  4223. +--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  4224. ++++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
  4225. +@@ -4127,38 +4127,22 @@ static void rt2800_config_channel(struct
  4226. + reg |= 0x00000101;
  4227. + rt2800_register_write(rt2x00dev, RF_BYPASS3, reg);
  4228. +
  4229. +- rt2800_rfcsr_write_bank(rt2x00dev, 4, 43, 0x73);
  4230. +- rt2800_rfcsr_write_bank(rt2x00dev, 6, 43, 0x73);
  4231. +- rt2800_rfcsr_write_bank(rt2x00dev, 4, 44, 0x73);
  4232. +- rt2800_rfcsr_write_bank(rt2x00dev, 6, 44, 0x73);
  4233. +- rt2800_rfcsr_write_bank(rt2x00dev, 4, 45, 0x73);
  4234. +- rt2800_rfcsr_write_bank(rt2x00dev, 6, 45, 0x73);
  4235. +- rt2800_rfcsr_write_bank(rt2x00dev, 4, 46, 0x27);
  4236. +- rt2800_rfcsr_write_bank(rt2x00dev, 6, 46, 0x27);
  4237. +- rt2800_rfcsr_write_bank(rt2x00dev, 4, 47, 0xC8);
  4238. +- rt2800_rfcsr_write_bank(rt2x00dev, 6, 47, 0xC8);
  4239. +- rt2800_rfcsr_write_bank(rt2x00dev, 4, 48, 0xA4);
  4240. +- rt2800_rfcsr_write_bank(rt2x00dev, 6, 48, 0xA4);
  4241. +- rt2800_rfcsr_write_bank(rt2x00dev, 4, 49, 0x05);
  4242. +- rt2800_rfcsr_write_bank(rt2x00dev, 6, 49, 0x05);
  4243. +- rt2800_rfcsr_write_bank(rt2x00dev, 4, 54, 0x27);
  4244. +- rt2800_rfcsr_write_bank(rt2x00dev, 6, 54, 0x27);
  4245. +- rt2800_rfcsr_write_bank(rt2x00dev, 4, 55, 0xC8);
  4246. +- rt2800_rfcsr_write_bank(rt2x00dev, 6, 55, 0xC8);
  4247. +- rt2800_rfcsr_write_bank(rt2x00dev, 4, 56, 0xA4);
  4248. +- rt2800_rfcsr_write_bank(rt2x00dev, 6, 56, 0xA4);
  4249. +- rt2800_rfcsr_write_bank(rt2x00dev, 4, 57, 0x05);
  4250. +- rt2800_rfcsr_write_bank(rt2x00dev, 6, 57, 0x05);
  4251. +- rt2800_rfcsr_write_bank(rt2x00dev, 4, 58, 0x27);
  4252. +- rt2800_rfcsr_write_bank(rt2x00dev, 6, 58, 0x27);
  4253. +- rt2800_rfcsr_write_bank(rt2x00dev, 4, 59, 0xC8);
  4254. +- rt2800_rfcsr_write_bank(rt2x00dev, 6, 59, 0xC8);
  4255. +- rt2800_rfcsr_write_bank(rt2x00dev, 4, 60, 0xA4);
  4256. +- rt2800_rfcsr_write_bank(rt2x00dev, 6, 60, 0xA4);
  4257. +- rt2800_rfcsr_write_bank(rt2x00dev, 4, 61, 0x05);
  4258. +- rt2800_rfcsr_write_bank(rt2x00dev, 6, 61, 0x05);
  4259. +- rt2800_rfcsr_write_bank(rt2x00dev, 5, 05, 0x00);
  4260. +- rt2800_rfcsr_write_bank(rt2x00dev, 7, 05, 0x00);
  4261. ++ rt2800_rfcsr_write_chanreg(rt2x00dev, 43, 0x73);
  4262. ++ rt2800_rfcsr_write_chanreg(rt2x00dev, 44, 0x73);
  4263. ++ rt2800_rfcsr_write_chanreg(rt2x00dev, 45, 0x73);
  4264. ++ rt2800_rfcsr_write_chanreg(rt2x00dev, 46, 0x27);
  4265. ++ rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0xC8);
  4266. ++ rt2800_rfcsr_write_chanreg(rt2x00dev, 48, 0xA4);
  4267. ++ rt2800_rfcsr_write_chanreg(rt2x00dev, 49, 0x05);
  4268. ++ rt2800_rfcsr_write_chanreg(rt2x00dev, 54, 0x27);
  4269. ++ rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0xC8);
  4270. ++ rt2800_rfcsr_write_chanreg(rt2x00dev, 56, 0xA4);
  4271. ++ rt2800_rfcsr_write_chanreg(rt2x00dev, 57, 0x05);
  4272. ++ rt2800_rfcsr_write_chanreg(rt2x00dev, 58, 0x27);
  4273. ++ rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0xC8);
  4274. ++ rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xA4);
  4275. ++ rt2800_rfcsr_write_chanreg(rt2x00dev, 61, 0x05);
  4276. ++ rt2800_rfcsr_write_dccal(rt2x00dev, 05, 0x00);
  4277. +
  4278. + rt2800_register_write(rt2x00dev, TX0_RF_GAIN_CORRECT,
  4279. + 0x36303636);
  4280. diff --git a/package/kernel/mac80211/patches/860-brcmfmac-register-wiphy-s-during-module_init.patch b/package/kernel/mac80211/patches/860-brcmfmac-register-wiphy-s-during-module_init.patch
  4281. index d09057f89686a54db350dbeda2fe49a84134a941..91831188ac4a02532d4dd34c694b70efd9c29b42 100644
  4282. --- a/package/kernel/mac80211/patches/860-brcmfmac-register-wiphy-s-during-module_init.patch
  4283. +++ b/package/kernel/mac80211/patches/860-brcmfmac-register-wiphy-s-during-module_init.patch
  4284. @@ -13,7 +13,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
  4285. --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
  4286. +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
  4287. -@@ -1196,6 +1196,7 @@ int __init brcmf_core_init(void)
  4288. +@@ -1180,6 +1180,7 @@ int __init brcmf_core_init(void)
  4289. {
  4290. if (!schedule_work(&brcmf_driver_work))
  4291. return -EBUSY;
  4292. diff --git a/package/kernel/mac80211/patches/921-ath10k_init_devices_synchronously.patch b/package/kernel/mac80211/patches/921-ath10k_init_devices_synchronously.patch
  4293. index 0c34d96847a0110779e59f4572bcfd8a1723417d..b966516e577217d60f732f56d2f3a6cabbd90864 100644
  4294. --- a/package/kernel/mac80211/patches/921-ath10k_init_devices_synchronously.patch
  4295. +++ b/package/kernel/mac80211/patches/921-ath10k_init_devices_synchronously.patch
  4296. @@ -14,7 +14,7 @@ Signed-off-by: Sven Eckelmann <sven@open-mesh.com>
  4297. --- a/drivers/net/wireless/ath/ath10k/core.c
  4298. +++ b/drivers/net/wireless/ath/ath10k/core.c
  4299. -@@ -2319,6 +2319,16 @@ int ath10k_core_register(struct ath10k *
  4300. +@@ -2329,6 +2329,16 @@ int ath10k_core_register(struct ath10k *
  4301. ar->chip_id = chip_id;
  4302. queue_work(ar->workqueue, &ar->register_work);
  4303. diff --git a/package/kernel/mac80211/patches/936-ath10k-fix-otp-failure-result.patch b/package/kernel/mac80211/patches/936-ath10k-fix-otp-failure-result.patch
  4304. new file mode 100644
  4305. index 0000000000000000000000000000000000000000..d302a7d2a3ad7b32db3d83c0438cb606f9d85c99
  4306. --- /dev/null
  4307. +++ b/package/kernel/mac80211/patches/936-ath10k-fix-otp-failure-result.patch
  4308. @@ -0,0 +1,11 @@
  4309. +--- a/drivers/net/wireless/ath/ath10k/core.c
  4310. ++++ b/drivers/net/wireless/ath/ath10k/core.c
  4311. +@@ -691,7 +691,7 @@ static int ath10k_core_get_board_id_from
  4312. + if (ret) {
  4313. + ath10k_err(ar, "could not execute otp for board id check: %d\n",
  4314. + ret);
  4315. +- return ret;
  4316. ++ return -EOPNOTSUPP;
  4317. + }
  4318. +
  4319. + board_id = MS(result, ATH10K_BMI_BOARD_ID_FROM_OTP);
  4320. diff --git a/package/kernel/mac80211/patches/936-ath10k_skip_otp_check.patch b/package/kernel/mac80211/patches/936-ath10k_skip_otp_check.patch
  4321. deleted file mode 100644
  4322. index 057995c55acf9015c64291013738e95b18df75a2..0000000000000000000000000000000000000000
  4323. --- a/package/kernel/mac80211/patches/936-ath10k_skip_otp_check.patch
  4324. +++ /dev/null
  4325. @@ -1,51 +0,0 @@
  4326. ---- a/drivers/net/wireless/ath/ath10k/core.c
  4327. -+++ b/drivers/net/wireless/ath/ath10k/core.c
  4328. -@@ -1362,9 +1362,6 @@ static int ath10k_core_fetch_firmware_fi
  4329. - {
  4330. - int ret;
  4331. -
  4332. -- /* calibration file is optional, don't check for any errors */
  4333. -- ath10k_fetch_cal_file(ar);
  4334. --
  4335. - ar->fw_api = 5;
  4336. - ath10k_dbg(ar, ATH10K_DBG_BOOT, "trying fw api %d\n", ar->fw_api);
  4337. -
  4338. -@@ -2149,7 +2146,7 @@ EXPORT_SYMBOL(ath10k_core_stop);
  4339. - static int ath10k_core_probe_fw(struct ath10k *ar)
  4340. - {
  4341. - struct bmi_target_info target_info;
  4342. -- int ret = 0;
  4343. -+ int calret, ret = 0;
  4344. -
  4345. - ret = ath10k_hif_power_up(ar);
  4346. - if (ret) {
  4347. -@@ -2173,6 +2170,9 @@ static int ath10k_core_probe_fw(struct a
  4348. - goto err_power_down;
  4349. - }
  4350. -
  4351. -+ /* calibration file is optional, don't check for any errors */
  4352. -+ calret = ath10k_fetch_cal_file(ar);
  4353. -+
  4354. - ret = ath10k_core_fetch_firmware_files(ar);
  4355. - if (ret) {
  4356. - ath10k_err(ar, "could not fetch firmware files (%d)\n", ret);
  4357. -@@ -2195,11 +2195,14 @@ static int ath10k_core_probe_fw(struct a
  4358. - "could not load pre cal data: %d\n", ret);
  4359. - }
  4360. -
  4361. -- ret = ath10k_core_get_board_id_from_otp(ar);
  4362. -- if (ret && ret != -EOPNOTSUPP) {
  4363. -- ath10k_err(ar, "failed to get board id from otp: %d\n",
  4364. -- ret);
  4365. -- goto err_free_firmware_files;
  4366. -+ /* otp and board file not needed if calibration data is present */
  4367. -+ if (calret) {
  4368. -+ ret = ath10k_core_get_board_id_from_otp(ar);
  4369. -+ if (ret && ret != -EOPNOTSUPP) {
  4370. -+ ath10k_err(ar, "failed to get board id from otp: %d\n",
  4371. -+ ret);
  4372. -+ goto err_free_firmware_files;
  4373. -+ }
  4374. - }
  4375. -
  4376. - ret = ath10k_core_check_smbios(ar);
  4377. diff --git a/package/kernel/mac80211/patches/960-0010-ath10k-limit-htt-rx-ring-size.patch b/package/kernel/mac80211/patches/960-0010-ath10k-limit-htt-rx-ring-size.patch
  4378. new file mode 100644
  4379. index 0000000000000000000000000000000000000000..d49be4df703e8039509ecea23de8b5bd8e590765
  4380. --- /dev/null
  4381. +++ b/package/kernel/mac80211/patches/960-0010-ath10k-limit-htt-rx-ring-size.patch
  4382. @@ -0,0 +1,11 @@
  4383. +--- a/drivers/net/wireless/ath/ath10k/htt.h
  4384. ++++ b/drivers/net/wireless/ath/ath10k/htt.h
  4385. +@@ -199,7 +199,7 @@ enum htt_rx_ring_flags {
  4386. + };
  4387. +
  4388. + #define HTT_RX_RING_SIZE_MIN 128
  4389. +-#define HTT_RX_RING_SIZE_MAX 2048
  4390. ++#define HTT_RX_RING_SIZE_MAX 512
  4391. +
  4392. + struct htt_rx_ring_setup_ring {
  4393. + __le32 fw_idx_shadow_reg_paddr;
  4394. diff --git a/package/kernel/mac80211/patches/960-0011-ath10k-limit-pci-buffer-size.patch b/package/kernel/mac80211/patches/960-0011-ath10k-limit-pci-buffer-size.patch
  4395. new file mode 100644
  4396. index 0000000000000000000000000000000000000000..a101282d074aeba592b042dcc9944c2a260e40ba
  4397. --- /dev/null
  4398. +++ b/package/kernel/mac80211/patches/960-0011-ath10k-limit-pci-buffer-size.patch
  4399. @@ -0,0 +1,38 @@
  4400. +--- a/drivers/net/wireless/ath/ath10k/pci.c
  4401. ++++ b/drivers/net/wireless/ath/ath10k/pci.c
  4402. +@@ -128,7 +128,7 @@ static struct ce_attr host_ce_config_wla
  4403. + .flags = CE_ATTR_FLAGS,
  4404. + .src_nentries = 0,
  4405. + .src_sz_max = 2048,
  4406. +- .dest_nentries = 512,
  4407. ++ .dest_nentries = 128,
  4408. + .recv_cb = ath10k_pci_htt_htc_rx_cb,
  4409. + },
  4410. +
  4411. +@@ -137,7 +137,7 @@ static struct ce_attr host_ce_config_wla
  4412. + .flags = CE_ATTR_FLAGS,
  4413. + .src_nentries = 0,
  4414. + .src_sz_max = 2048,
  4415. +- .dest_nentries = 128,
  4416. ++ .dest_nentries = 64,
  4417. + .recv_cb = ath10k_pci_htc_rx_cb,
  4418. + },
  4419. +
  4420. +@@ -164,7 +164,7 @@ static struct ce_attr host_ce_config_wla
  4421. + .flags = CE_ATTR_FLAGS,
  4422. + .src_nentries = 0,
  4423. + .src_sz_max = 512,
  4424. +- .dest_nentries = 512,
  4425. ++ .dest_nentries = 128,
  4426. + .recv_cb = ath10k_pci_htt_rx_cb,
  4427. + },
  4428. +
  4429. +@@ -189,7 +189,7 @@ static struct ce_attr host_ce_config_wla
  4430. + .flags = CE_ATTR_FLAGS,
  4431. + .src_nentries = 0,
  4432. + .src_sz_max = 2048,
  4433. +- .dest_nentries = 128,
  4434. ++ .dest_nentries = 96,
  4435. + .recv_cb = ath10k_pci_pktlog_rx_cb,
  4436. + },
  4437. +
  4438. diff --git a/package/kernel/mt76/Makefile b/package/kernel/mt76/Makefile
  4439. index 8a6e414e10c35557b2fc6b89f80bec6c2297ee59..8fa3267180c897aaad07466111a1273d72dbceae 100644
  4440. --- a/package/kernel/mt76/Makefile
  4441. +++ b/package/kernel/mt76/Makefile
  4442. @@ -1,16 +1,16 @@
  4443. include $(TOPDIR)/rules.mk
  4444. PKG_NAME:=mt76
  4445. -PKG_RELEASE=2
  4446. +PKG_RELEASE=1
  4447. PKG_LICENSE:=GPLv2
  4448. PKG_LICENSE_FILES:=
  4449. PKG_SOURCE_URL:=https://github.com/openwrt/mt76
  4450. PKG_SOURCE_PROTO:=git
  4451. -PKG_SOURCE_DATE:=2017-01-31
  4452. -PKG_SOURCE_VERSION:=3c8caafc5e150db79f714b958a51cee8f242f309
  4453. -PKG_MIRROR_HASH:=c03c166466cb7ea825e52cd085511045e3847d927ba2bde2b8fb46595a3ed13a
  4454. +PKG_SOURCE_DATE:=2017-07-17
  4455. +PKG_SOURCE_VERSION:=3c4c9a647e4feff3a42ee94d477041fdcf26c463
  4456. +PKG_MIRROR_HASH:=7ed7ef6356fafc2525cb6204ca2a3d584c1b83340ef5a1f7c581052f3a1982b1
  4457. PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
  4458. PKG_BUILD_PARALLEL:=1
  4459. diff --git a/target/linux/generic/files/include/linux/ath9k_platform.h b/target/linux/generic/files/include/linux/ath9k_platform.h
  4460. index 558445ff63a0f7f7bfff35286c39f89e243156de..f1f2ad419c752fc4a6a07c6b7fe366bf0ae8e38f 100644
  4461. --- a/target/linux/generic/files/include/linux/ath9k_platform.h
  4462. +++ b/target/linux/generic/files/include/linux/ath9k_platform.h
  4463. @@ -49,7 +49,6 @@ struct ath9k_platform_data {
  4464. int num_leds;
  4465. const struct gpio_led *leds;
  4466. - const char *led_name;
  4467. unsigned num_btns;
  4468. const struct gpio_keys_button *btns;