From 50fbdb0f3c3b7d730b10204ad1810c4f67258eae Mon Sep 17 00:00:00 2001 From: TipoMan Date: Thu, 1 Jan 2026 19:46:17 +0200 Subject: [PATCH 1/3] Add ssc377qe_fpv_generic device --- .../board/infinity6c/fragments/wext.config | 2 + .../configs/ssc377qe_fpv_defconfig | 79 +++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 devices/ssc377qe_fpv_generic/br-ext-chip-sigmastar/board/infinity6c/fragments/wext.config create mode 100644 devices/ssc377qe_fpv_generic/br-ext-chip-sigmastar/configs/ssc377qe_fpv_defconfig diff --git a/devices/ssc377qe_fpv_generic/br-ext-chip-sigmastar/board/infinity6c/fragments/wext.config b/devices/ssc377qe_fpv_generic/br-ext-chip-sigmastar/board/infinity6c/fragments/wext.config new file mode 100644 index 000000000..5311b6fb6 --- /dev/null +++ b/devices/ssc377qe_fpv_generic/br-ext-chip-sigmastar/board/infinity6c/fragments/wext.config @@ -0,0 +1,2 @@ +CONFIG_CFG80211_WEXT=y +CONFIG_WEXT_CORE=y diff --git a/devices/ssc377qe_fpv_generic/br-ext-chip-sigmastar/configs/ssc377qe_fpv_defconfig b/devices/ssc377qe_fpv_generic/br-ext-chip-sigmastar/configs/ssc377qe_fpv_defconfig new file mode 100644 index 000000000..b9a0e14fc --- /dev/null +++ b/devices/ssc377qe_fpv_generic/br-ext-chip-sigmastar/configs/ssc377qe_fpv_defconfig @@ -0,0 +1,79 @@ +# Architecture +BR2_arm=y +BR2_cortex_a35=y +BR2_ARM_FPU_NEON_VFPV4=y +BR2_ARM_INSTRUCTIONS_THUMB2=y + +# Toolchain +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y +BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y +BR2_TOOLCHAIN_EXTERNAL_URL="https://github.com/openipc/firmware/releases/download/$(OPENIPC_TOOLCHAIN).tgz" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="arm-openipc-linux-musleabihf" +BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_10=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/openipc/linux/archive/$(OPENIPC_KERNEL).tar.gz" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(EXTERNAL_VENDOR)/board/$(OPENIPC_SOC_FAMILY)/infinity6c-ssc027d.config" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(EXTERNAL_VENDOR)/board/$(OPENIPC_SOC_FAMILY)/fragments/wext.config" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_XZ=y + +# Filesystem +BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL)/package/busybox/busybox.config" +BR2_PACKAGE_EXFATPROGS=y +BR2_PACKAGE_UBOOT_TOOLS=y +BR2_PACKAGE_ZLIB=y +# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set +# BR2_PACKAGE_WIREGUARD_LINUX_COMPAT=y +# BR2_PACKAGE_WIREGUARD_TOOLS=y +BR2_PACKAGE_WIRELESS_REGDB=y +BR2_PACKAGE_WIRELESS_TOOLS=y +# BR2_PACKAGE_WPA_SUPPLICANT=y +# BR2_PACKAGE_WPA_SUPPLICANT_CLI=y +# BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_SQUASHFS=y +BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y + +# OpenIPC +BR2_OPENIPC_SOC_VENDOR="sigmastar" +BR2_OPENIPC_SOC_MODEL="ssc377qe" +BR2_OPENIPC_SOC_FAMILY="infinity6c" +BR2_OPENIPC_VARIANT="fpv" +BR2_OPENIPC_FLASH_SIZE="16" + +# Packages +BR2_PACKAGE_DROPBEAR_OPENIPC=y +BR2_PACKAGE_EXFAT_OPENIPC=y +BR2_PACKAGE_IPCTOOL=y +BR2_PACKAGE_JSONFILTER=y +BR2_PACKAGE_LIBCURL_OPENIPC=y +BR2_PACKAGE_LIBCURL_OPENIPC_CURL=y +# BR2_PACKAGE_LIBCURL_OPENIPC_PROXY_SUPPORT is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_COOKIES_SUPPORT is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_EXTRA_PROTOCOLS_FEATURES is not set +BR2_PACKAGE_LIBEVENT_OPENIPC=y +BR2_PACKAGE_LIBOGG_OPENIPC=y +# BR2_PACKAGE_LINUX_PATCHER_SIGMASTAR_DTB="infinity6c-ssc027d-s01a-demo" +BR2_PACKAGE_MAJESTIC_FONTS=y +BR2_PACKAGE_MAJESTIC_WEBUI=y +BR2_PACKAGE_MAJESTIC=y +BR2_PACKAGE_MBEDTLS_OPENIPC=y +BR2_PACKAGE_OPUS_OPENIPC=y +BR2_PACKAGE_OPUS_OPENIPC_FIXED_POINT=y +BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_ATHEROS_9271=y +BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC=y +BR2_PACKAGE_LINUX_PATCHER_ATHEROS=y +BR2_PACKAGE_RTL8733BU_OPENIPC=y +BR2_PACKAGE_RTL88X2EU_OPENIPC=y +BR2_PACKAGE_RTL8812AU_OPENIPC=y +BR2_PACKAGE_SIGMASTAR_OSDRV_INFINITY6C=y +BR2_PACKAGE_VTUND_OPENIPC=y +BR2_PACKAGE_WIFIBROADCAST_NG=y +BR2_PACKAGE_YAML_CLI=y From 3cb3b555d5bf9bcf5f859d41b9863ec21d09d8e9 Mon Sep 17 00:00:00 2001 From: TipoMan Date: Fri, 2 Jan 2026 02:19:49 +0200 Subject: [PATCH 2/3] ssc377qe_fpv_generic added ath9k patched drivers --- .../board/infinity6c/fragments/wext.config | 8 + .../overlay/lib/firmware/regulatory.db | Bin 0 -> 4816 bytes .../overlay/lib/firmware/regulatory.db.p7s | Bin 0 -> 1192 bytes .../5.10.61/sigmastar/sensor_imx335_mipi.ko | Bin 0 -> 21292 bytes ...10-4_9_28-ath9k_htc-misc_AllChannels.patch | 319 ++++++++++++++++++ ...-011-ath9k_regdb_AllowAllFrequencies.patch | 75 ++++ .../30-020-ath9k_DisableCarrierSense.patch | 146 ++++++++ .../linux/30-021-ath9k_ChannelBW.patch | 218 ++++++++++++ .../package/linux-patcher/linux-patcher.mk | 63 ++++ 9 files changed, 829 insertions(+) create mode 100644 devices/ssc377qe_fpv_generic/general/overlay/lib/firmware/regulatory.db create mode 100644 devices/ssc377qe_fpv_generic/general/overlay/lib/firmware/regulatory.db.p7s create mode 100644 devices/ssc377qe_fpv_generic/general/overlay/lib/modules/5.10.61/sigmastar/sensor_imx335_mipi.ko create mode 100644 devices/ssc377qe_fpv_generic/general/package/all-patches/linux/30-010-4_9_28-ath9k_htc-misc_AllChannels.patch create mode 100644 devices/ssc377qe_fpv_generic/general/package/all-patches/linux/30-011-ath9k_regdb_AllowAllFrequencies.patch create mode 100644 devices/ssc377qe_fpv_generic/general/package/all-patches/linux/30-020-ath9k_DisableCarrierSense.patch create mode 100644 devices/ssc377qe_fpv_generic/general/package/all-patches/linux/30-021-ath9k_ChannelBW.patch create mode 100644 devices/ssc377qe_fpv_generic/general/package/linux-patcher/linux-patcher.mk diff --git a/devices/ssc377qe_fpv_generic/br-ext-chip-sigmastar/board/infinity6c/fragments/wext.config b/devices/ssc377qe_fpv_generic/br-ext-chip-sigmastar/board/infinity6c/fragments/wext.config index 5311b6fb6..a109af933 100644 --- a/devices/ssc377qe_fpv_generic/br-ext-chip-sigmastar/board/infinity6c/fragments/wext.config +++ b/devices/ssc377qe_fpv_generic/br-ext-chip-sigmastar/board/infinity6c/fragments/wext.config @@ -1,2 +1,10 @@ CONFIG_CFG80211_WEXT=y CONFIG_WEXT_CORE=y + +# Atheros driver fix +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=m +CONFIG_MAC80211_LEDS=y + +# Allow regdb overwriting +# CONFIG_CFG80211_REQUIRE_SIGNED_REGDB is not set diff --git a/devices/ssc377qe_fpv_generic/general/overlay/lib/firmware/regulatory.db b/devices/ssc377qe_fpv_generic/general/overlay/lib/firmware/regulatory.db new file mode 100644 index 0000000000000000000000000000000000000000..8b9949be7b1432e0768ec80ca372ddb062ba8b21 GIT binary patch literal 4816 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 B`$_-+ literal 0 HcmV?d00001 diff --git a/devices/ssc377qe_fpv_generic/general/overlay/lib/modules/5.10.61/sigmastar/sensor_imx335_mipi.ko b/devices/ssc377qe_fpv_generic/general/overlay/lib/modules/5.10.61/sigmastar/sensor_imx335_mipi.ko new file mode 100644 index 0000000000000000000000000000000000000000..c999d8c1ee5626a9d6e827af349513031a61eae1 GIT binary patch literal 21292 zcmeHv4RlmRmVdqO4s-%y0zneKd`SmPAjHlGB(&fp>CpLvM7|~}+6hUA?tFB5(j5pc zqmAH91{g($*^^P$K}9DxjvJ6L=uRe4ql@Rv-+vI@#gCoIy39bp;|7S@D-PM;tyiz} z(h17`&+P7h&syiy`_-*`>sHmRTh;ZdUh=?-5}PDRObrrCWFr(~AFbq^unZ1~ES|+N z1Jcomdc^!y>sZ;)^66|#o+#A@-JYAED zq@*lpFm}h8dg=@plckvMHLWXLG2QyXtNJzmsjcn#EGwp4lCyKOx~R^+K%1G#lPWy< zl-ixUy}Q7qzap^%=E#aY-AqQEW>0=(XWzhl>!gZjax=RN;wVqLqKC|~?#K!zM|PpC zyrXtk?&9~Qq#1p>q`1CEU!Gai6F8F;i|78xoJ)^OKdXwWh>g3W;%AQBORwiVT2VUm zXwwHZ41JE`k~eb6(xK<>Aj#;sfwPl&ez>Y3it^`j4LP6xDd(TgDs5xkit$FCiv}*| zgxSI_CQt0ClYYtOTQ9BBO}70iV5nGX>kGvAe-)Te(UX6!?uLsK^wvwIx}~;{d8e$b$wX4Nk=oc_Z({h)4Q#N_$tsjj2z+~9V}WU2_9)tRoG)tmn9 z?2cL~z9+CZlF2&)-$!p24Fs$Pn?C6dl#~W_(-Ut?T*WRX8`(TamG#%<*u1UM;w1sY z!hF~9{E3S`JIUm(bAcTE*-khTW%fx z;_7g}BeF{wi|f@h>l^e0I;A9oZIW%t$%kq?1KVV_AhnNs^@LQL^^&BcUi8<6U3^TJ zYSWwkUQoM0=>(-Wgn{@M=AiH^WNd6sUf;fW)bB07Yhq@GClcLrS)Y3l z_4Hhx7~gZ`AZF9+JZC>+^1*-~)WrA?k-rmEt64JbL@Qx!gsjd2Qy9E@zr3?ne?_Nz zXJA3vuH2hX@6MfbYDN*Y;3>yD&NbH3p)Z??tT|S8MK4opOzsEgR=R(Z+uE(aXk-Vf z5@C~Ph9wh|Nq1HkmCUv7$_+n_5|?)6hMh7LDVmCmAMu&@3HO;S^fe*a*QaV8b&~d@ zu-j4eXJX<%yIZ^c#?te8QyW$t>v^5^DBAke#i?P_teqG9H$GjL)!lBS)aw^=b@4T& z=l!}_?@zsLckawnyJsp^I1udrL7D8)ZhrN$-g+?b0&t?~E!d^Qd@yh{GOKH<>5uT} ze>to8A=$>jZS#=EHnFhHj8oCvHisNj$FYrMYOj)Qhuq`~!(Ti+%;fRyp_DE%eyp)a z>5#leSx+U?qzYXzJcT@?d-_dbtaQj>#V<@ zMq?XZz)a@O$#ab6pX5qdCCpuS1k%g01I7(&fl_*Qz_4KueWl-=I_`XWa@2gH`7<)RM$fh9NAZqJv{mN5)b0 z2~TI3Z8F-^X8u9#?%Z|nN7#}Jk_&0hEi7DE5RW!o9bQl@CC}>9B`5XmdpWTvsql@! z{_HYmVv#N}raQv+27Z-uF0D`dpdvQ@u8N$`_cqO}{J_cNyPZd>UUGQ4W*5yBCFYDO zF-P}7#oYKmo{cVw5&Y?6_{*R%`|}gf$l{;Fx)q7%PI(TVt@7`9&)*hv(*vJPCnx`! zuxMZ~-(X8T{Da!tU-lG!uYmeSzxntL{-L|rV0IU>dD1PVL-DTCq03JE)+oA$)*INcwKq_4XK$by zu^!QbxWBA-AhE4?AbDNyKuR0+V6G{z(D2z#Pw&7ol(&F)J9ycgx6E`qc1FgBh~2UYwwbZzL+49XIhR_~e-PMKmR^&9ao>)yt`XzC1K9r)+ATBo2;$EX z|CWgVf`A=bsp?mo3Y{9i3OwR~UpWe;TiCo2zcRqD&SNL6pY$gD=~UoT_{xjGOTZ(* z&w)<@zXU!Fyb62{sEd0OeswA^0r=V|-&$3?s<5gm7IueM4J^2gJd68MU=PNe{Hgqq z;!o8t!_V; zo*(gN|I!qshxjwwLf*jmGq99=;w%0%aBnd3XEOH&vxU6qrgT${>PPb-9ch_|XEcAt zSQ3z)&7ZQxgmfZ*CRpN;UPe#uJDVJ{xaT~sPp?^g_BHr}>NB*_C!aY5q|L__#Q&_I z^^w}bx=}vjgpW8w)*kYaW5P$qt}EAGhs^MeWAKp-;448NiH*ObnARZp#=S<|INp+V9o`ZfZ!S*6o5{8O#lStq$e+o4^)U0N zvc_n=;}(p0q=lZ*7V?xB{+!J{Mdr^$?kNfUnZZ3Ji$6m>CHvA-rX!B@8d_&=JsW{{ zYSmwEMEbwNUp$=;)kYVz<|a83yN$Mv&-{&9crWr-&}wh6QECeRT~3%;I(R}~b3vM* zk3V=tpCeDvUzrfaOxfopIeZF9OQvT7d$0$fou{XZnQv#FPPyozS~;kl#f|8n<}5zE zBUk^$O>@R6=GOgIt zImOnNo7f#QZZB`p^wM!b3LEKV*r;CiT#jI7Kl(>H@&2&07H{HG3`)N}OmE?T6PUpF z`90XN=}ZR$z2c2W*Adw@TK?E5`Qt+VHyU}G$6>aqC3v@vVDn2qAKrR2!2Cx8x{ebo z!cUg-7UL~DqbB8&@*e(3#4YFQa&33mtgijGyKVjXEb-Gm={rLwY3K3j*(~_f_3Es? zPMv+a>(_a`?X190tFcp(8Qwy;XYsW~;!o;{vFk703)US7yZ(M`xlY@(PW;R3tPcOn z>&%{{>b$9h``LZBw8G2$-(7Lz$?Tw)`EWYJPkSDD`Jxm)f&0`KXK_+BsdO+R{9K*I zb|?2cEBCukPUhN{+VuRl=MR{Nvu|L`1pfFw!0@Z$hN~@Zol}FvoO3Z-{rpS zRA{2!3zR2$U9#;xoaVIUzvME+$v8K>?CK1Z$4c>(W~S1i{?(bau{POu9P;%^(gHeB zi~`-3f5ZdjC{%loUP3z8~x2 zu;b4$D%LVP`lL9W;4>oDy}fz7RN1`QgMQ7A1RY=n_VQqPNI}d=`XY2;pL{G z+;mZ^m0{g)nPiNxjHO6BM%eKuc)Y1QZ*Z;#fFUV zMSnbr5#V(g4@=uSI@nI72F5x%I{dWT?&x^lp9?%>JnZ*zy2F3Jz{feZ`(F`s0ov2? zg5*C&i1Kd&e}!^>tXCZ!?fw%2BXQXMOXTkXlH6W_CpfnIGf*+rcT`{*)(N6}fh7O7 zzvtzg*zG0xN)2FT)x^`t|~;e}f#+U!$VmC@_KJ^ZrQ8|Bj9q z{Z7o;zeTw{m{)|yZ&b=hM=E$g;1FTEv_)S_1%jYPC~h>D0da*zC<|* z<#eLl_`Fb8VO4OQs>%k%5O$Z_<+D30-PQFDyJ97F4y_qLybJM8#By^uO9Q5wqnO#e z?`sq|tDEfAjrDe~qb8NHT9k1iI?Zphdx7^LZZJ<}=YbaxuiX$;Praii*cu)BIy{UC zA#k!em)&4aL5t>~Ws$sv8Rl}f81^WG_L9^Nc2}y7Ia42DwW;^Bzd?%*q%L4j0S_WR zi})O3JK_t7ze0Qw@m<9C5dRVJOsd2#Betf+v0Z687M&5sZpw&ZvonU-94z()OC(mb z#K1}rTaeziB$eHdI3Y8V88h`PI#b7{Bi@uLu^FIeXD(-RGQY!;GqJZoOv$vdTY=`x zAF)(mTBebuLpCGxDqEZx#>q{vfzgUHrDZYt#Mh8ahW!1T)rKX|GY8z ze;JQ&=gI#M^JMJ$_3b?Q@0=%(^Itmp#mm6@wHUuQ1&D=+MP>slHtSglcr340&DQIcw8E3u!yD|N!C_kt(! zo-9Wsk(>p(Z&#cDb0$z$6s_N@lm9wGJ!(3@qc5i*2sa8vl*X!EkmRDL!ig~VYtH+^ms+^Tg9z~Kj&9c7GCLT$U@jTBKt zTyCFILfZ|CIATDa%)2I|Yt#Z>*C@&6`bMF2xwh}BhQ?-}r`acyC1jXnBTN_6GfF<# z4%KMaqai3urK=qthr8OloVjsuvAnuzv%LYQ1UM;hHM9iJeK2+nm782u%NM7lnp2jf z%AO_%oe#+kjn(#McYPxcRdQCZ+?*-*E>`B|4C1X14aSo@34r!PtjpO7^87FVn zIC+WVS*$w`3;Djk&@T}(!#|WrRmZPeT)<<&D6~` z#KRrGHt6}6bKCg>RsyEQ@2CTl4AP92BQnxJPhG!*e?vC(ac4WV@* z^G9g`m7#g1gND)NBN(>=c()6F8qkVJsLFegR)U`E@u?*A6(HS=7=cLg8-NcW&K7h7 z@Cig&(A$B3hxo9dsXcU$s{}oxdyfW~VJ(pK(TBCM8oD3!8#v2X`P47E8&LvA1nELV zH!{@rKd#}E{F53w3h7@XMr!2W)$mFFw1%eSHr%x+L9vHlL*ER6?V!mnYW=+$KIx;o z8YSr2Ldd@rB0m{-H7cLv=}t$b^B^AudK)rGe>vzMgC;qmTR=YwI!n+XS&ybXuU|vA zLf|dX^%{9>=E=T&@W?8v_a4y z8Qp~{LD3(LJ5iOcgurJgZ$<{`BYCh6QAyu zRhsk%G&J$)&RGeH{u1g84`O}O&{TdTg!A9y9u1%L(OtC?#P|od1&Thp!`AYh8k)+} z-L{th8x2i-y7SiZW!PJ#iBEUoDoySEN<$NWB!uzyp9y9tbdY3IxSx&C6S;g|Fhik( zB#Yww5qeq(JtKq;-49I<;ZF{sqdDye4nj0L1%Fcmxxtwb`huXT-%;3q{W*kx15FGO zsQfJ|jrkYFV%cJq29NkFLg)>kU6}6)ke`bAxFdwWCxmVTP0cSroQnPBFGBdoL7xY2 zGGY|=lWz)n0}4%LVeB2y)EBisAA|l#L!Sdp?Ns?+fsVp@S1#H&C%D!tatlJ}rJ$*9 zwY(KHEyoHygOz}$v`QC@lApoWfmQ>xV?zjC6+(MM=kyawjDH8X4?wOh68s)yL+6u=Pl*jim2UQWZwd z3Y;eSn!T$UeXg3Vfh2p76*8kGim9X@Miy(5+>NE$zG`&tn`JD^2z?61}GH6p4O{^^zaNe^#}GWkcmNF73r+m3h{ z9}Xh%tx$c4ggSP7-dx{TJR`DTFwMFiN6U6QKhwfN?iQE3 z+Fs@H*gZ|=kRKK8=VIy<;$M5=5V^i_Q>vL+D;r9^_=?c&t6^361#&lg)Ea{|)K|MU zqZQ22;%T%uIlZZNe7wh$>7+EStjV$2<=A3hnNx13)l<1GP;+T+*gcLW7j#_P|HKU9 z4O;14Q}1wiG@Z6lpM%y^?j*E_>I|0+ZeJa1aNtupe#|edtXvcX`{F`hNUdt~GMeZ? zlPi@w8glCE8>_TpV)CU~*U;@pVV;)9RbW(9);Qf(J#?f)1^gR6>J+bYoj1=>U%7Ss zQN^!a&}r!OUwbK`6kq9RP#q8Z4iBOZdzdWj|8zJ`Tt%V|1RRi&f6FblB^? zf_+{DK02l|E0WXU{g-GulOnoD;0Gd~&Wb4C2_!i>3nKbWLDN|e(K~^}?-BH5)J6Gp z7D7m89E6c*E6LHB1kuL?O=k{7%ZP*)#E5pZUm(5n>!AA+Lg*S4^bjFpfDk&qBBYmX z>}hrPU|&XfFZO(dcJ!050`&k%|AT}-XY6BvR|U?+J3r;qyFb-;h7k3i6Z9v79wJ1& z0YQHykYUeH@&-a|n2m&J$7I4P*ntq=rAHH1GZsUL_rlqPcz=@#@m`idco*K;2xsBF zpAd%)Wu@XWDzL6ok9pgfH8}|Q%HQ0|6 z<}p@5n8R2#A#Bt=3gAm_aItdrx9hz_< z<_}>8&Lat7pB6$F<_jV0<0piDb`s{}4w?}5*bgLoP}|538w9opY!gUlGt~bALfE53 z&}D)y7q~%Sg}`b;*uzQKfc6r)(O$wvw3o05?Ipw_u#ND0XfI(g+Dll5_7XN>z7dw- zT#(Sq*gnFQI7=b)p+AH;=s!TX26uIYn{hTmxCP(g65&GlK8KSxdxW)DI-Poe(sg$q+poV^4fKgCV+H z(Dw?g7WlA0I(s3xGlGtWuMnLDBt3MtLi8R%(^(499|$@IJ{9q6_%D$169_Sm`zasg zI|yG@-YFw`lylLDBap`u6md|wcZv87>_PN###R$P4ZkGBMw0J1zhtMr#>3>(jn5hx2JJ;XN)%o3O_us~p$z;b~V0-XXq0$T+7 z1-1&@E3i%A0fFrTI|LpV*dy?Sz&?Se1@;R(CvZ?;Kp@$R`ehUtDKJK$EHF_ZK9%9} z^!rTZvIQ0hEE8BRutK0ygX}fTf1(YT|02IdpkH9Cz`X+71RfCBF0e!3ae+MoPYCQ2 zcv@h;z;gm&2DSiu2Oi)D6c*?eWP+x7f~GRvGm4++URL}>cU0UPfFC3Hvk70vyds2i zClZ36Ecj-^r!Zd$d-1y<_}PTepGS!DSlXEG7=8~3QGTu9mkWLcVW((M7}gQ=NB08u zD};x@O!01Q@KtUE`kEAUswsD)&yljp-JG(KZl@RFn~@ZrRl@(DSPD*aQhbgUALA+7 zDr-nbOOV9(7by^L?Q*Km7_5xe^P@gho5hT;bm|K z9z68Ko2*haE!!RRS~ zpCL{9pf;!vZaYe!?hl*eCL@pZksZ|bZA6-yquTE`&^H;h8dQDX zLk8qL4+_Q!$PFTc`bt5S!?t5oy$4XQ5z49F2q8yyq2Da3Hw}@(aSX;Qlpz8oDee}i zwy$ZX5D=giIjG15+vkHE)kC(UptkP-(ptN;W8V{rJZj$*M3SR&Sbj#?W!p9CeMgZC z)=P3!o@`7(t@mxDwe=p?)Egz_sN7jZ>XX{vozRzx{gE2f{C`D;R<1J%cao|x1dqzl zZ?;yhWg+&p#1KJkUjVeWeJ9Yq1IQ!0ko&84F+v&XQ^)-y=p*~7LDfe-uGQznVoUua zeKQbMeN#j9iA!-+9m^J}DIxki(5H?YUR8tok|9U+sO@8z_-BL;0=0ekY?SxItnwgd zQ`11Od89v$qO=-pkkba0SA+!W^r$?NyHzECsvMy@hQw}xTm>eaj5M}VynWO!vR$wb cNT0UgFYc&gBB=VvceHYT*yS#j37(q#cNhP!r~m)} literal 0 HcmV?d00001 diff --git a/devices/ssc377qe_fpv_generic/general/package/all-patches/linux/30-010-4_9_28-ath9k_htc-misc_AllChannels.patch b/devices/ssc377qe_fpv_generic/general/package/all-patches/linux/30-010-4_9_28-ath9k_htc-misc_AllChannels.patch new file mode 100644 index 000000000..1f915fb07 --- /dev/null +++ b/devices/ssc377qe_fpv_generic/general/package/all-patches/linux/30-010-4_9_28-ath9k_htc-misc_AllChannels.patch @@ -0,0 +1,319 @@ +diff -Naur linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367/drivers/net/wireless/ath/ath9k/common-init.c linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367.patched/drivers/net/wireless/ath/ath9k/common-init.c +--- linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367/drivers/net/wireless/ath/ath9k/common-init.c 2017-05-15 17:23:14.000000000 +0200 ++++ linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367.patched/drivers/net/wireless/ath/ath9k/common-init.c 2017-07-05 22:29:13.285134611 +0200 +@@ -22,14 +22,14 @@ + .band = NL80211_BAND_2GHZ, \ + .center_freq = (_freq), \ + .hw_value = (_idx), \ +- .max_power = 20, \ ++ .max_power = 30, \ + } + + #define CHAN5G(_freq, _idx) { \ + .band = NL80211_BAND_5GHZ, \ + .center_freq = (_freq), \ + .hw_value = (_idx), \ +- .max_power = 20, \ ++ .max_power = 30, \ + } + + /* Some 2 GHz radios are actually tunable on 2312-2732 +@@ -37,6 +37,27 @@ + * we have calibration data for all cards though to make + * this static */ + static const struct ieee80211_channel ath9k_2ghz_chantable[] = { ++ CHAN2G(2312, 34), /* Channel XX */ ++ CHAN2G(2317, 35), /* Channel XX */ ++ CHAN2G(2322, 36), /* Channel XX */ ++ CHAN2G(2327, 37), /* Channel XX */ ++ CHAN2G(2332, 38), /* Channel XX */ ++ CHAN2G(2337, 39), /* Channel XX */ ++ CHAN2G(2342, 40), /* Channel XX */ ++ CHAN2G(2347, 41), /* Channel XX */ ++ CHAN2G(2352, 42), /* Channel XX */ ++ CHAN2G(2357, 43), /* Channel XX */ ++ CHAN2G(2362, 44), /* Channel XX */ ++ CHAN2G(2367, 45), /* Channel XX */ ++ CHAN2G(2372, 46), /* Channel XX */ ++ CHAN2G(2377, 47), /* Channel XX */ ++ CHAN2G(2382, 48), /* Channel XX */ ++ CHAN2G(2387, 49), /* Channel XX */ ++ CHAN2G(2392, 50), /* Channel XX */ ++ CHAN2G(2397, 51), /* Channel XX */ ++ CHAN2G(2402, 52), /* Channel XX */ ++ CHAN2G(2407, 53), /* Channel XX */ ++ + CHAN2G(2412, 0), /* Channel 1 */ + CHAN2G(2417, 1), /* Channel 2 */ + CHAN2G(2422, 2), /* Channel 3 */ +@@ -50,7 +71,31 @@ + CHAN2G(2462, 10), /* Channel 11 */ + CHAN2G(2467, 11), /* Channel 12 */ + CHAN2G(2472, 12), /* Channel 13 */ +- CHAN2G(2484, 13), /* Channel 14 */ ++ ++ CHAN2G(2477, 13), /* Channel XX */ ++ CHAN2G(2478, 14), /* Channel XX */ ++ CHAN2G(2482, 15), /* Channel XX */ ++ ++ CHAN2G(2484, 16), /* Channel 14 */ ++ ++ CHAN2G(2487, 17), /* Channel XX */ ++ CHAN2G(2489, 18), /* Channel XX */ ++ CHAN2G(2492, 19), /* Channel XX */ ++ CHAN2G(2494, 20), /* Channel XX */ ++ CHAN2G(2497, 21), /* Channel XX */ ++ CHAN2G(2499, 22), /* Channel XX */ ++ CHAN2G(2512, 23), /* Channel XX */ ++ CHAN2G(2532, 24), /* Channel XX */ ++ CHAN2G(2572, 25), /* Channel XX */ ++ CHAN2G(2592, 26), /* Channel XX */ ++ CHAN2G(2612, 27), /* Channel XX */ ++ CHAN2G(2632, 28), /* Channel XX */ ++ CHAN2G(2652, 29), /* Channel XX */ ++ CHAN2G(2672, 30), /* Channel XX */ ++ CHAN2G(2692, 31), /* Channel XX */ ++ CHAN2G(2712, 32), /* Channel XX */ ++ CHAN2G(2732, 33), /* Channel XX */ ++ + }; + + /* Some 5 GHz radios are actually tunable on XXXX-YYYY +@@ -58,34 +103,39 @@ + * we have calibration data for all cards though to make + * this static */ + static const struct ieee80211_channel ath9k_5ghz_chantable[] = { ++ CHAN5G(4920, 54), /* Channel XX */ ++ CHAN5G(4940, 55), /* Channel XX */ ++ CHAN5G(4960, 56), /* Channel XX */ ++ CHAN5G(4980, 57), /* Channel XX */ ++ + /* _We_ call this UNII 1 */ +- CHAN5G(5180, 14), /* Channel 36 */ +- CHAN5G(5200, 15), /* Channel 40 */ +- CHAN5G(5220, 16), /* Channel 44 */ +- CHAN5G(5240, 17), /* Channel 48 */ ++ CHAN5G(5180, 58), /* Channel 36 */ ++ CHAN5G(5200, 59), /* Channel 40 */ ++ CHAN5G(5220, 60), /* Channel 44 */ ++ CHAN5G(5240, 61), /* Channel 48 */ + /* _We_ call this UNII 2 */ +- CHAN5G(5260, 18), /* Channel 52 */ +- CHAN5G(5280, 19), /* Channel 56 */ +- CHAN5G(5300, 20), /* Channel 60 */ +- CHAN5G(5320, 21), /* Channel 64 */ ++ CHAN5G(5260, 62), /* Channel 52 */ ++ CHAN5G(5280, 63), /* Channel 56 */ ++ CHAN5G(5300, 64), /* Channel 60 */ ++ CHAN5G(5320, 65), /* Channel 64 */ + /* _We_ call this "Middle band" */ +- CHAN5G(5500, 22), /* Channel 100 */ +- CHAN5G(5520, 23), /* Channel 104 */ +- CHAN5G(5540, 24), /* Channel 108 */ +- CHAN5G(5560, 25), /* Channel 112 */ +- CHAN5G(5580, 26), /* Channel 116 */ +- CHAN5G(5600, 27), /* Channel 120 */ +- CHAN5G(5620, 28), /* Channel 124 */ +- CHAN5G(5640, 29), /* Channel 128 */ +- CHAN5G(5660, 30), /* Channel 132 */ +- CHAN5G(5680, 31), /* Channel 136 */ +- CHAN5G(5700, 32), /* Channel 140 */ ++ CHAN5G(5500, 66), /* Channel 100 */ ++ CHAN5G(5520, 67), /* Channel 104 */ ++ CHAN5G(5540, 68), /* Channel 108 */ ++ CHAN5G(5560, 69), /* Channel 112 */ ++ CHAN5G(5580, 70), /* Channel 116 */ ++ CHAN5G(5600, 71), /* Channel 120 */ ++ CHAN5G(5620, 72), /* Channel 124 */ ++ CHAN5G(5640, 73), /* Channel 128 */ ++ CHAN5G(5660, 74), /* Channel 132 */ ++ CHAN5G(5680, 75), /* Channel 136 */ ++ CHAN5G(5700, 76), /* Channel 140 */ + /* _We_ call this UNII 3 */ +- CHAN5G(5745, 33), /* Channel 149 */ +- CHAN5G(5765, 34), /* Channel 153 */ +- CHAN5G(5785, 35), /* Channel 157 */ +- CHAN5G(5805, 36), /* Channel 161 */ +- CHAN5G(5825, 37), /* Channel 165 */ ++ CHAN5G(5745, 77), /* Channel 149 */ ++ CHAN5G(5765, 78), /* Channel 153 */ ++ CHAN5G(5785, 79), /* Channel 157 */ ++ CHAN5G(5805, 80), /* Channel 161 */ ++ CHAN5G(5825, 81), /* Channel 165 */ + }; + + /* Atheros hardware rate code addition for short premble */ +diff -Naur linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367/drivers/net/wireless/ath/ath9k/eeprom_4k.c linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367.patched/drivers/net/wireless/ath/ath9k/eeprom_4k.c +--- linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367/drivers/net/wireless/ath/ath9k/eeprom_4k.c 2017-05-15 17:23:14.000000000 +0200 ++++ linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367.patched/drivers/net/wireless/ath/ath9k/eeprom_4k.c 2017-07-08 10:26:46.864373518 +0200 +@@ -18,6 +18,9 @@ + #include "hw.h" + #include "ar9002_phy.h" + ++extern u8 tx_power_man; ++extern u8 thresh62_man; ++ + static int ath9k_hw_4k_get_eeprom_ver(struct ath_hw *ah) + { + return ((ah->eeprom.map4k.baseEepHeader.version >> 12) & 0xF); +@@ -636,8 +639,12 @@ + if (test) + return; + +- for (i = 0; i < Ar5416RateSize; i++) +- ratesArray[i] -= AR5416_PWR_TABLE_OFFSET_DB * 2; ++ for (i = 0; i < Ar5416RateSize; i++) { ++// ratesArray[i] -= AR5416_PWR_TABLE_OFFSET_DB * 2; ++ ratesArray[i] = tx_power_man; ++ } ++ ++ printk("ATH: TX Power set: %d\n",tx_power_man); + + ENABLE_REGWRITE_BUFFER(ah); + +@@ -1009,10 +1016,8 @@ + if (AR_SREV_9271_10(ah)) + REG_RMW_FIELD(ah, AR_PHY_RF_CTL3, AR_PHY_TX_END_TO_A2_RX_ON, + pModal->txEndToRxOn); +- REG_RMW_FIELD(ah, AR_PHY_CCA, AR9280_PHY_CCA_THRESH62, +- pModal->thresh62); +- REG_RMW_FIELD(ah, AR_PHY_EXT_CCA0, AR_PHY_EXT_CCA0_THRESH62, +- pModal->thresh62); ++ REG_RMW_FIELD(ah, AR_PHY_CCA, AR9280_PHY_CCA_THRESH62, thresh62_man); ++ REG_RMW_FIELD(ah, AR_PHY_EXT_CCA0, AR_PHY_EXT_CCA0_THRESH62, thresh62_man); + + if ((eep->baseEepHeader.version & AR5416_EEP_VER_MINOR_MASK) >= + AR5416_EEP_MINOR_VER_2) { +diff -Naur linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367/drivers/net/wireless/ath/ath9k/eeprom_9287.c linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367.patched/drivers/net/wireless/ath/ath9k/eeprom_9287.c +--- linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367/drivers/net/wireless/ath/ath9k/eeprom_9287.c 2017-05-15 17:23:14.000000000 +0200 ++++ linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367.patched/drivers/net/wireless/ath/ath9k/eeprom_9287.c 2017-07-08 09:12:25.724306578 +0200 +@@ -18,6 +18,8 @@ + #include "hw.h" + #include "ar9002_phy.h" + ++extern u8 tx_power_man; ++ + #define SIZE_EEPROM_AR9287 (sizeof(struct ar9287_eeprom) / sizeof(u16)) + + static int ath9k_hw_ar9287_get_eeprom_ver(struct ath_hw *ah) +@@ -762,8 +764,12 @@ + if (test) + return; + +- for (i = 0; i < Ar5416RateSize; i++) +- ratesArray[i] -= AR9287_PWR_TABLE_OFFSET_DB * 2; ++ for (i = 0; i < Ar5416RateSize; i++) { ++// ratesArray[i] -= AR9287_PWR_TABLE_OFFSET_DB * 2; ++ ratesArray[i] = tx_power_man; ++ } ++ ++ printk("ATH: TX Power set: %d\n",tx_power_man); + + ENABLE_REGWRITE_BUFFER(ah); + +diff -Naur linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367/drivers/net/wireless/ath/ath9k/hif_usb.h linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367.patched/drivers/net/wireless/ath/ath9k/hif_usb.h +--- linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367/drivers/net/wireless/ath/ath9k/hif_usb.h 2017-05-15 17:23:14.000000000 +0200 ++++ linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367.patched/drivers/net/wireless/ath/ath9k/hif_usb.h 2017-07-05 22:45:17.405149078 +0200 +@@ -61,7 +61,7 @@ + #define MAX_PKT_NUM_IN_TRANSFER 10 + + #define MAX_REG_OUT_URB_NUM 1 +-#define MAX_REG_IN_URB_NUM 64 ++#define MAX_REG_IN_URB_NUM 8 + + #define MAX_REG_IN_BUF_SIZE 64 + +diff -Naur linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367/drivers/net/wireless/ath/ath9k/hw.c linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367.patched/drivers/net/wireless/ath/ath9k/hw.c +--- linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367/drivers/net/wireless/ath/ath9k/hw.c 2017-05-15 17:23:14.000000000 +0200 ++++ linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367.patched/drivers/net/wireless/ath/ath9k/hw.c 2017-07-08 10:33:39.816379714 +0200 +@@ -37,6 +37,40 @@ + MODULE_SUPPORTED_DEVICE("Atheros 802.11n WLAN cards"); + MODULE_LICENSE("Dual BSD/GPL"); + ++u8 tx_power_man = 58; //manual power ++u8 cwmin_man = 7; ++u8 cwmax_man = 15; ++u8 aifs_man = 2; ++u8 cck_sifs_man = 10; ++u8 ofdm_sifs_man = 16; ++u8 slottime_man = 9; ++u8 thresh62_man = 28; ++ ++module_param_named(txpower,tx_power_man,byte,0444); ++MODULE_PARM_DESC(txpower,"Manual TX power setting, default 58, max 63"); ++ ++module_param_named(cwmin,cwmin_man,byte,0444); ++MODULE_PARM_DESC(cwmin,"CWMIN setting, 0-255, default 7"); ++ ++module_param_named(cwmax,cwmax_man,byte,0444); ++MODULE_PARM_DESC(cwmax,"CWMAX setting, 0-255, default 15"); ++ ++module_param_named(aifs,aifs_man,byte,0444); ++MODULE_PARM_DESC(aifs,"AIFS setting, default 2"); ++ ++module_param_named(cck_sifs,cck_sifs_man,byte,0444); ++MODULE_PARM_DESC(cck_sifs,"CCK SIFS setting, default 10"); ++ ++module_param_named(ofdm_sifs,ofdm_sifs_man,byte,0444); ++MODULE_PARM_DESC(ofdm_sifs,"OFDM SIFS setting, default 16"); ++ ++module_param_named(slottime,slottime_man,byte,0444); ++MODULE_PARM_DESC(slottime,"Slottime setting, default 9"); ++ ++module_param_named(thresh62,thresh62_man,byte,0444); ++MODULE_PARM_DESC(thresh62,"CCA THRESH62 setting, default 28"); ++ ++ + static void ath9k_hw_set_clockrate(struct ath_hw *ah) + { + struct ath_common *common = ath9k_hw_common(ah); +@@ -1076,7 +1110,8 @@ + } + + /* As defined by IEEE 802.11-2007 17.3.8.6 */ +- slottime += 3 * ah->coverage_class; ++// slottime += 3 * ah->coverage_class; ++ slottime = slottime_man; + acktimeout = slottime + sifstime + ack_offset; + ctstimeout = acktimeout; + +diff -Naur linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367/drivers/net/wireless/ath/ath9k/hw.h linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367.patched/drivers/net/wireless/ath/ath9k/hw.h +--- linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367/drivers/net/wireless/ath/ath9k/hw.h 2017-05-15 17:23:14.000000000 +0200 ++++ linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367.patched/drivers/net/wireless/ath/ath9k/hw.h 2017-07-05 22:50:22.949153662 +0200 +@@ -73,7 +73,7 @@ + + #define ATH9K_RSSI_BAD -128 + +-#define ATH9K_NUM_CHANNELS 38 ++#define ATH9K_NUM_CHANNELS 82 + + /* Register read/write primitives */ + #define REG_WRITE(_ah, _reg, _val) \ +diff -Naur linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367/drivers/net/wireless/ath/ath9k/mac.c linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367.patched/drivers/net/wireless/ath/ath9k/mac.c +--- linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367/drivers/net/wireless/ath/ath9k/mac.c 2017-05-15 17:23:14.000000000 +0200 ++++ linux-1423ac8bfbfb2a9d092b604c676e7a58a5fa3367.patched/drivers/net/wireless/ath/ath9k/mac.c 2017-07-08 10:12:18.540360489 +0200 +@@ -18,6 +18,14 @@ + #include "hw-ops.h" + #include + ++extern u8 cwmin_man; ++extern u8 cwmax_man; ++extern u8 aifs_man; ++extern u8 cck_sifs; ++extern u8 ofdm_sifs; ++ ++ ++ + static void ath9k_hw_set_txq_interrupts(struct ath_hw *ah, + struct ath9k_tx_queue_info *qi) + { +@@ -216,7 +224,8 @@ + if (qinfo->tqi_aifs != ATH9K_TXQ_USEDEFAULT) + qi->tqi_aifs = min(qinfo->tqi_aifs, 255U); + else +- qi->tqi_aifs = INIT_AIFS; ++// qi->tqi_aifs = INIT_AIFS; ++ qi->tqi_aifs = aifs_man; + if (qinfo->tqi_cwmin != ATH9K_TXQ_USEDEFAULT) { + cw = min(qinfo->tqi_cwmin, 1024U); + qi->tqi_cwmin = 1; diff --git a/devices/ssc377qe_fpv_generic/general/package/all-patches/linux/30-011-ath9k_regdb_AllowAllFrequencies.patch b/devices/ssc377qe_fpv_generic/general/package/all-patches/linux/30-011-ath9k_regdb_AllowAllFrequencies.patch new file mode 100644 index 000000000..2231615d2 --- /dev/null +++ b/devices/ssc377qe_fpv_generic/general/package/all-patches/linux/30-011-ath9k_regdb_AllowAllFrequencies.patch @@ -0,0 +1,75 @@ +diff --git a/drivers/net/wireless/ath/regd.c b/drivers/net/wireless/ath/regd.c +index f15e7bd..3a46707 100644 +--- a/drivers/net/wireless/ath/regd.c ++++ b/drivers/net/wireless/ath/regd.c +@@ -33,12 +33,12 @@ static int __ath_regd_init(struct ath_regulatory *reg); + */ + + /* Only these channels all allow active scan on all world regulatory domains */ +-#define ATH_2GHZ_CH01_11 REG_RULE(2412-10, 2462+10, 40, 0, 20, 0) ++#define ATH_2GHZ_CH01_11 REG_RULE(2312-10, 2462+10, 40, 0, 30, 0) + + /* We enable active scan on these a case by case basis by regulatory domain */ + #define ATH_2GHZ_CH12_13 REG_RULE(2467-10, 2472+10, 40, 0, 20,\ + NL80211_RRF_NO_IR) +-#define ATH_2GHZ_CH14 REG_RULE(2484-10, 2484+10, 40, 0, 20,\ ++#define ATH_2GHZ_CH14 REG_RULE(2484-10, 2732+10, 40, 0, 30,\ + NL80211_RRF_NO_IR | \ + NL80211_RRF_NO_OFDM) + +@@ -77,9 +77,8 @@ static const struct ieee80211_regdomain ath_world_regdom_63_65 = { + .n_reg_rules = 4, + .alpha2 = "99", + .reg_rules = { +- ATH_2GHZ_CH01_11, +- ATH_2GHZ_CH12_13, +- ATH_5GHZ_NO_MIDBAND, ++ ATH_2GHZ_ALL, ++ ATH_5GHZ_ALL, + } + }; + +@@ -88,8 +87,8 @@ static const struct ieee80211_regdomain ath_world_regdom_64 = { + .n_reg_rules = 3, + .alpha2 = "99", + .reg_rules = { +- ATH_2GHZ_CH01_11, +- ATH_5GHZ_NO_MIDBAND, ++ ATH_2GHZ_ALL, ++ ATH_5GHZ_ALL, + } + }; + +@@ -98,7 +97,7 @@ static const struct ieee80211_regdomain ath_world_regdom_66_69 = { + .n_reg_rules = 3, + .alpha2 = "99", + .reg_rules = { +- ATH_2GHZ_CH01_11, ++ ATH_2GHZ_ALL, + ATH_5GHZ_ALL, + } + }; +@@ -108,8 +107,7 @@ static const struct ieee80211_regdomain ath_world_regdom_67_68_6A_6C = { + .n_reg_rules = 4, + .alpha2 = "99", + .reg_rules = { +- ATH_2GHZ_CH01_11, +- ATH_2GHZ_CH12_13, ++ ATH_2GHZ_ALL, + ATH_5GHZ_ALL, + } + }; +@@ -258,9 +256,7 @@ static bool ath_is_radar_freq(u16 center_freq, + struct ath_regulatory *reg) + + { +- if (reg->country_code == CTRY_INDIA) +- return (center_freq >= 5500 && center_freq <= 5700); +- return (center_freq >= 5260 && center_freq <= 5700); ++ return false; + } + + static void ath_force_clear_no_ir_chan(struct wiphy *wiphy, +-- +2.39.2 + diff --git a/devices/ssc377qe_fpv_generic/general/package/all-patches/linux/30-020-ath9k_DisableCarrierSense.patch b/devices/ssc377qe_fpv_generic/general/package/all-patches/linux/30-020-ath9k_DisableCarrierSense.patch new file mode 100644 index 000000000..04a2bd28f --- /dev/null +++ b/devices/ssc377qe_fpv_generic/general/package/all-patches/linux/30-020-ath9k_DisableCarrierSense.patch @@ -0,0 +1,146 @@ +--- a/drivers/net/wireless/ath/ath9k/hw.c 2023-10-29 23:13:23.000000000 +0200 ++++ b/drivers/net/wireless/ath/ath9k/hw.c 2023-10-29 23:51:03.576486582 +0200 +@@ -45,6 +45,12 @@ + u8 ofdm_sifs_man = 16; + u8 slottime_man = 9; + u8 thresh62_man = 28; ++u8 disable_CS = 1; ++u8 disable_CS_man = 0; ++u8 CTSTimeOut_man = 0; ++u8 ACKTimeOut_man = 0; ++u8 CTSTimeOut = 0; ++u8 ACKTimeOut = 0; + + module_param_named(txpower, tx_power_man, byte, 0444); + MODULE_PARM_DESC(txpower, "Manual TX power setting, default 58, max 63"); +@@ -70,6 +76,16 @@ + module_param_named(thresh62, thresh62_man, byte, 0444); + MODULE_PARM_DESC(thresh62, "CCA THRESH62 setting, default 28"); + ++module_param_named(disable_CS,disable_CS_man,byte,0444); ++MODULE_PARM_DESC(disable_CS,"Disable Carrier Sense default 0"); ++ ++module_param_named(CTSTimeOut,CTSTimeOut_man,byte,0444); ++MODULE_PARM_DESC(CTSTimeOut,"CTSTimeOut default 0"); ++ ++module_param_named(ACKTimeOut,ACKTimeOut_man,byte,0444); ++MODULE_PARM_DESC(ACKTimeOut,"ACKTimeOut default 0"); ++ ++ + static void ath9k_hw_set_clockrate(struct ath_hw *ah) + { + struct ath_common *common = ath9k_hw_common(ah); +@@ -1052,6 +1068,7 @@ + int sifstime; + int rx_lat = 0, tx_lat = 0, eifs = 0; + u32 reg; ++ int qnum=0; + + ath_dbg(ath9k_hw_common(ah), RESET, "ah->misc_mode 0x%x\n", + ah->misc_mode); +@@ -1134,6 +1151,26 @@ + ah->dynack.ackto = acktimeout; + } + ++ bool register_override=false; ++ if (ofdm_sifs_man!=16) { ++ sifstime=ofdm_sifs_man; ++ eifs=ofdm_sifs_man; ++ register_override=true; ++ } ++ if (ACKTimeOut_man!=0){ ++ acktimeout= ACKTimeOut_man; ++ register_override=true; ++ } ++ if (CTSTimeOut_man!=0){ ++ ctstimeout=CTSTimeOut_man; ++ register_override=true; ++ } ++ ++ if (cck_sifs_man!=10){ ++ tx_lat=cck_sifs_man*10; ++ register_override=true; ++ } ++ + ath9k_hw_set_sifs_time(ah, sifstime); + ath9k_hw_setslottime(ah, slottime); + ath9k_hw_set_ack_timeout(ah, acktimeout); +@@ -1148,6 +1185,19 @@ + SM(tx_lat, AR_USEC_TX_LAT), + AR_USEC_TX_LAT | AR_USEC_RX_LAT | AR_USEC_USEC); + ++ ath_err(common,"SET rx_lat:%d, tx_lat:%d, sifstime:%d, eifs:%d, slottime:%d, acktimeout:%d, ctstimeout:%d",rx_lat, tx_lat, sifstime, eifs, slottime, acktimeout, ctstimeout); ++ ++ if(disable_CS_man==1){ ++ ath_err(ath9k_hw_common(ah), "Disabled Carrier Sense! %d !\n",disable_CS, disable_CS_man); ++ REG_SET_BIT(ah, AR_DIAG_SW, AR_DIAG_FORCE_RX_CLEAR); ++ REG_SET_BIT(ah, AR_DIAG_SW, AR_DIAG_IGNORE_VIRT_CS); ++ REG_SET_BIT(ah, AR_DIAG_SW, AR_DIAG_FORCE_CH_IDLE_HIGH); ++ } ++ ++ if (register_override || disable_CS_man==1){ ++ for (qnum=0;qnum<7;qnum++) ++ REG_WRITE(ah, AR_DLCL_IFS(qnum), 0); ++ } + if (IS_CHAN_HALF_RATE(chan) || IS_CHAN_QUARTER_RATE(chan)) + REG_RMW(ah, AR_TXSIFS, + sifstime | SM(ack_shift, AR_TXSIFS_ACK_SHIFT), + +--- a/drivers/net/wireless/ath/ath9k/mac.c 2023-10-29 23:13:23.000000000 +0200 ++++ b/drivers/net/wireless/ath/ath9k/mac.c 2023-10-29 23:56:49.383741779 +0200 +@@ -18,6 +18,12 @@ + #include "hw-ops.h" + #include + ++extern u8 cwmin_man; ++extern u8 cwmax_man; ++extern u8 aifs_man; ++extern u8 cck_sifs; ++extern u8 ofdm_sifs; ++ + static void ath9k_hw_set_txq_interrupts(struct ath_hw *ah, + struct ath9k_tx_queue_info *qi) + { +@@ -217,6 +217,7 @@ + qi->tqi_aifs = min(qinfo->tqi_aifs, 255U); + else + qi->tqi_aifs = aifs_man; ++ + if (qinfo->tqi_cwmin != ATH9K_TXQ_USEDEFAULT) { + cw = min(qinfo->tqi_cwmin, 1024U); + qi->tqi_cwmin = 1; +@@ -245,6 +246,21 @@ + qi->tqi_burstTime = qinfo->tqi_burstTime; + qi->tqi_readyTime = qinfo->tqi_readyTime; + ++ bool override=false; ++ if (cwmax_man!=15){ ++ qi->tqi_cwmax=cwmax_man; ++ override=true; ++ } ++ if (cwmin_man!=7){ ++ qi->tqi_cwmin=cwmin_man; ++ override=true; ++ } ++ if (aifs_man!=2){ ++ qi->tqi_aifs = aifs_man; ++ override=true; ++ } ++ ++ + switch (qinfo->tqi_subtype) { + case ATH9K_WME_UPSD: + if (qi->tqi_type == ATH9K_TX_QUEUE_DATA) +@@ -254,6 +270,11 @@ + break; + } + ++ if (override){ ++ REG_WRITE(ah, AR_DLCL_IFS(q), 0); ++ ath_err(common, "SET cwmax:%d, cwmin:%d, aifs:%d for queu:%d", qi->tqi_cwmax, qi->tqi_cwmin, qi->tqi_aifs,q); ++ } ++ + return true; + } + EXPORT_SYMBOL(ath9k_hw_set_txq_props); + diff --git a/devices/ssc377qe_fpv_generic/general/package/all-patches/linux/30-021-ath9k_ChannelBW.patch b/devices/ssc377qe_fpv_generic/general/package/all-patches/linux/30-021-ath9k_ChannelBW.patch new file mode 100644 index 000000000..bc36ee976 --- /dev/null +++ b/devices/ssc377qe_fpv_generic/general/package/all-patches/linux/30-021-ath9k_ChannelBW.patch @@ -0,0 +1,218 @@ +diff --git a/ath.h b/ath.h +index da7a7c8..02765fd 100644 +--- a/drivers/net/wireless/ath/ath.h ++++ b/drivers/net/wireless/ath/ath.h +@@ -151,6 +151,7 @@ struct ath_common { + int debug_mask; + enum ath_device_state state; + unsigned long op_flags; ++ u32 chan_bw; + + struct ath_ani ani; + +@@ -179,6 +180,7 @@ struct ath_common { + const struct ath_ops *ops; + const struct ath_bus_ops *bus_ops; + const struct ath_ps_ops *ps_ops; ++ const struct ieee80211_ops *ieee_ops; + + bool btcoex_enabled; + bool disable_ani; +diff --git a/ath9k/common-debug.c b/ath9k/common-debug.c +index 84afcf7..2c55389 100644 +--- a/drivers/net/wireless/ath/ath9k/common-debug.c ++++ b/drivers/net/wireless/ath/ath9k/common-debug.c +@@ -259,3 +259,56 @@ void ath9k_cmn_debug_phy_err(struct dentry *debugfs_phy, + &fops_phy_err); + } + EXPORT_SYMBOL(ath9k_cmn_debug_phy_err); ++ ++ ++static ssize_t read_file_chan_bw(struct file *file, char __user *user_buf, ++ size_t count, loff_t *ppos) ++{ ++ struct ath_hw *ah = file->private_data; ++ struct ath_common *common = ath9k_hw_common(ah); ++ char buf[32]; ++ unsigned int len; ++ ++ len = sprintf(buf, "0x%08x\n", common->chan_bw); ++ return simple_read_from_buffer(user_buf, count, ppos, buf, len); ++} ++ ++static ssize_t write_file_chan_bw(struct file *file, const char __user *user_buf, ++ size_t count, loff_t *ppos) ++{ ++ struct ath_hw *ah = file->private_data; ++ struct ath_common *common = ath9k_hw_common(ah); ++ unsigned long chan_bw; ++ char buf[32]; ++ ssize_t len; ++ ++ len = min(count, sizeof(buf) - 1); ++ if (copy_from_user(buf, user_buf, len)) ++ return -EFAULT; ++ ++ buf[len] = '\0'; ++ if (kstrtoul(buf, 0, &chan_bw)) ++ return -EINVAL; ++ ++ common->chan_bw = chan_bw; ++ if (!test_bit(ATH_OP_INVALID, &common->op_flags)) ++ common->ieee_ops->config(ah->hw, IEEE80211_CONF_CHANGE_CHANNEL); ++ ++ return count; ++} ++ ++static const struct file_operations fops_chanbw = { ++ .read = read_file_chan_bw, ++ .write = write_file_chan_bw, ++ .open = simple_open, ++ .owner = THIS_MODULE, ++ .llseek = default_llseek, ++}; ++ ++void ath9k_cmn_debug_chanbw(struct dentry *debugfs_phy, ++ struct ath_hw *ah) ++{ ++ debugfs_create_file("chanbw", S_IRUSR | S_IWUSR, debugfs_phy, ah, ++ &fops_chanbw); ++} ++EXPORT_SYMBOL(ath9k_cmn_debug_chanbw); +\ No newline at end of file +diff --git a/ath9k/common-debug.h b/ath9k/common-debug.h +index 7c97884..8972ab4 100644 +--- a/drivers/net/wireless/ath/ath9k/common-debug.h ++++ b/drivers/net/wireless/ath/ath9k/common-debug.h +@@ -64,6 +64,8 @@ void ath9k_cmn_debug_modal_eeprom(struct dentry *debugfs_phy, + struct ath_hw *ah); + void ath9k_cmn_debug_base_eeprom(struct dentry *debugfs_phy, + struct ath_hw *ah); ++void ath9k_cmn_debug_chanbw(struct dentry *debugfs_phy, ++ struct ath_hw *ah); + void ath9k_cmn_debug_stat_rx(struct ath_rx_stats *rxstats, + struct ath_rx_status *rs); + void ath9k_cmn_debug_recv(struct dentry *debugfs_phy, +diff --git a/ath9k/common.c b/ath9k/common.c +index b80e08b..dbf4956 100644 +--- a/drivers/net/wireless/ath/ath9k/common.c ++++ b/drivers/net/wireless/ath/ath9k/common.c +@@ -296,11 +296,13 @@ EXPORT_SYMBOL(ath9k_cmn_get_hw_crypto_keytype); + /* + * Update internal channel flags. + */ +-static void ath9k_cmn_update_ichannel(struct ath9k_channel *ichan, ++static void ath9k_cmn_update_ichannel(struct ath_common *common, ++ struct ath9k_channel *ichan, + struct cfg80211_chan_def *chandef) + { + struct ieee80211_channel *chan = chandef->chan; + u16 flags = 0; ++ int width; + + ichan->channel = chan->center_freq; + ichan->chan = chan; +@@ -308,7 +310,19 @@ static void ath9k_cmn_update_ichannel(struct ath9k_channel *ichan, + if (chan->band == NL80211_BAND_5GHZ) + flags |= CHANNEL_5GHZ; + +- switch (chandef->width) { ++ switch (common->chan_bw) { ++ case 5: ++ width = NL80211_CHAN_WIDTH_5; ++ break; ++ case 10: ++ width = NL80211_CHAN_WIDTH_10; ++ break; ++ default: ++ width = chandef->width; ++ break; ++ } ++ ++ switch (width) { + case NL80211_CHAN_WIDTH_5: + flags |= CHANNEL_QUARTER; + break; +@@ -341,10 +355,11 @@ struct ath9k_channel *ath9k_cmn_get_channel(struct ieee80211_hw *hw, + struct cfg80211_chan_def *chandef) + { + struct ieee80211_channel *curchan = chandef->chan; ++ struct ath_common *common = ath9k_hw_common(ah); + struct ath9k_channel *channel; + + channel = &ah->channels[curchan->hw_value]; +- ath9k_cmn_update_ichannel(channel, chandef); ++ ath9k_cmn_update_ichannel(common, channel, chandef); + + return channel; + } +diff --git a/ath9k/debug.c b/ath9k/debug.c +index c56e40f..6112431 100644 +--- a/drivers/net/wireless/ath/ath9k/debug.c ++++ b/drivers/net/wireless/ath/ath9k/debug.c +@@ -1385,6 +1385,7 @@ int ath9k_init_debug(struct ath_hw *ah) + + ath9k_cmn_debug_base_eeprom(sc->debug.debugfs_phy, sc->sc_ah); + ath9k_cmn_debug_modal_eeprom(sc->debug.debugfs_phy, sc->sc_ah); ++ ath9k_cmn_debug_chanbw(sc->debug.debugfs_phy, sc->sc_ah); + + debugfs_create_u32("gpio_mask", S_IRUSR | S_IWUSR, + sc->debug.debugfs_phy, &sc->sc_ah->gpio_mask); +diff --git a/ath9k/htc_drv_debug.c b/ath9k/htc_drv_debug.c +index dc79afd..2c08a41 100644 +--- a/drivers/net/wireless/ath/ath9k/htc_drv_debug.c ++++ b/drivers/net/wireless/ath/ath9k/htc_drv_debug.c +@@ -519,6 +519,7 @@ int ath9k_htc_init_debug(struct ath_hw *ah) + + ath9k_cmn_debug_base_eeprom(priv->debug.debugfs_phy, priv->ah); + ath9k_cmn_debug_modal_eeprom(priv->debug.debugfs_phy, priv->ah); ++ ath9k_cmn_debug_chanbw(priv->debug.debugfs_phy, priv->ah); + + return 0; + } +diff --git a/ath9k/htc_drv_init.c b/ath9k/htc_drv_init.c +index b65c1b6..66b73da 100644 +--- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c ++++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c +@@ -211,7 +211,7 @@ static int ath9k_init_htc_services(struct ath9k_htc_priv *priv, u16 devid, + if (ret) + goto err; + +- dev_info(priv->dev, "ath9k_htc: HTC initialized with %d credits\n", ++ dev_info(priv->dev, "ath9k_htc: HTC initialized 2322~2712Mhz,ChannelBandwidth 10,5 with %d credits\n", + priv->htc->credits); + + return 0; +@@ -633,6 +633,7 @@ static int ath9k_init_priv(struct ath9k_htc_priv *priv, + priv->ah = ah; + + common = ath9k_hw_common(ah); ++ common->ieee_ops = &ath9k_htc_ops; + common->ops = &ah->reg_ops; + common->ps_ops = &ath9k_htc_ps_ops; + common->bus_ops = &ath9k_usb_bus_ops; +@@ -750,9 +751,9 @@ static void ath9k_set_hw_capab(struct ath9k_htc_priv *priv, + + hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN | + WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL | +- WIPHY_FLAG_HAS_CHANNEL_SWITCH; +- +- hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS; ++ WIPHY_FLAG_HAS_CHANNEL_SWITCH | ++ WIPHY_FLAG_SUPPORTS_5_10_MHZ | ++ WIPHY_FLAG_SUPPORTS_TDLS; + + hw->queues = 4; + hw->max_listen_interval = 1; +diff --git a/ath9k/init.c b/ath9k/init.c +index 297d4bb..50f832f 100644 +--- a/drivers/net/wireless/ath/ath9k/init.c ++++ b/drivers/net/wireless/ath/ath9k/init.c +@@ -592,6 +592,7 @@ static int ath9k_init_softc(u16 devid, struct ath_softc *sc, + if (!ath9k_is_chanctx_enabled()) + sc->cur_chan->hw_queue_base = 0; + ++ common->ieee_ops = &ath9k_ops; + common->ops = &ah->reg_ops; + common->bus_ops = bus_ops; + common->ps_ops = &ath9k_ps_ops; diff --git a/devices/ssc377qe_fpv_generic/general/package/linux-patcher/linux-patcher.mk b/devices/ssc377qe_fpv_generic/general/package/linux-patcher/linux-patcher.mk new file mode 100644 index 000000000..9d6981d5a --- /dev/null +++ b/devices/ssc377qe_fpv_generic/general/package/linux-patcher/linux-patcher.mk @@ -0,0 +1,63 @@ +################################################################################ +# +# linux-patcher +# +################################################################################ + +LINUX_PATCHER_DEPENDENCIES = linux +export UIMAGE_NAME = Linux-$(LINUX_VERSION_PROBED)-$(OPENIPC_SOC_MODEL) + +# Exclude buildroot yylloc patches +LINUX_POST_PATCH_HOOKS = LINUX_APPLY_LOCAL_PATCHES + +ifeq ($(BR2_PACKAGE_LINUX_PATCHER_ATHEROS),y) +define LINUX_PATCHER_CONFIG_ATHEROS + $(call KCONFIG_ENABLE_OPT,CONFIG_FW_LOADER) + $(call KCONFIG_ENABLE_OPT,CONFIG_WLAN) + $(call KCONFIG_SET_OPT,CONFIG_MAC80211,m) + $(call KCONFIG_SET_OPT,CONFIG_ATH9K,m) + $(call KCONFIG_SET_OPT,CONFIG_ATH9K_HTC,m) +endef +endif + +ifneq ($(BR2_PACKAGE_LINUX_PATCHER_SIGMASTAR_DTB),"") +define LINUX_PATCHER_CONFIG_SIGMASTAR_DTB + $(call KCONFIG_SET_OPT,CONFIG_SS_DTB_NAME,$(BR2_PACKAGE_LINUX_PATCHER_SIGMASTAR_DTB)) +endef +endif + +define LINUX_PATCHER_LINUX_CONFIG_FIXUPS + $(LINUX_PATCHER_CONFIG_ATHEROS) + $(LINUX_PATCHER_CONFIG_SIGMASTAR_DTB) +endef + +#Disable regdb signing so that it can be overwritten on the cam +define DISABLE_SIGNED_REGDB_IN_KCONFIG + @echo "[force-nosign] Mangling net/wireless/Kconfig" + # $(SED) already has -i -e; don't add extra -i/-e + $(SED) '/^config CFG80211_REQUIRE_SIGNED_REGDB$$/,/^config /{ \ + s/^[[:space:]]*depends on .*/\tdepends on n/; \ + s/^[[:space:]]*default[[:space:]]*y/\tdefault n/; \ + }' $(LINUX_DIR)/net/wireless/Kconfig + @echo "[force-nosign] Resulting Kconfig stanza:" + @sed -n '/^config CFG80211_REQUIRE_SIGNED_REGDB$$/,/^config /p' \ + $(LINUX_DIR)/net/wireless/Kconfig +endef +LINUX_POST_PATCH_HOOKS += DISABLE_SIGNED_REGDB_IN_KCONFIG + +# For some reasong cant enable this the simple way, always get removed +define FORCE_MAC80211_LEDS_IN_KCONFIG + @echo "[force-mac80211-leds] Mangling net/mac80211/Kconfig" + $(SED) '/^config MAC80211_LEDS$$/,/^config /{ \ + s/^[[:space:]]*depends on .*/\tdepends on y/; \ + s/^[[:space:]]*default[[:space:]]*n/\tdefault y/; \ + }' $(LINUX_DIR)/net/mac80211/Kconfig + @echo "[force-mac80211-leds] Resulting Kconfig stanza:" + @sed -n '/^config MAC80211_LEDS$$/,/^config /p' \ + $(LINUX_DIR)/net/mac80211/Kconfig +endef +LINUX_POST_PATCH_HOOKS += FORCE_MAC80211_LEDS_IN_KCONFIG + + + +$(eval $(generic-package)) From 85213ff15fda63b084bd0ec6268127f3a07bbdd1 Mon Sep 17 00:00:00 2001 From: TipoMan Date: Sun, 4 Jan 2026 22:10:38 +0200 Subject: [PATCH 3/3] Add ssc377qe region library --- .../general/overlay/usr/lib/libmi_rgn.so | Bin 0 -> 9608 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 devices/ssc377qe_fpv_generic/general/overlay/usr/lib/libmi_rgn.so diff --git a/devices/ssc377qe_fpv_generic/general/overlay/usr/lib/libmi_rgn.so b/devices/ssc377qe_fpv_generic/general/overlay/usr/lib/libmi_rgn.so new file mode 100644 index 0000000000000000000000000000000000000000..e538162679e84307ddb65fd3284301f9c8a6be2a GIT binary patch literal 9608 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