xr819: add driver for XR819 wireless devices
authorZoltan HERPAI <wigyori@uid0.hu>
Thu, 6 Feb 2025 23:18:22 +0000 (00:18 +0100)
committerZoltan HERPAI <wigyori@uid0.hu>
Sun, 16 Feb 2025 21:20:26 +0000 (22:20 +0100)
SDIO-based wireless devices for which the driver was never upstreamed.
It is used on various SBCs like the OrangePi Zero Plus (ARM).

Signed-off-by: Zoltan HERPAI <wigyori@uid0.hu>
package/kernel/xr819/Makefile [new file with mode: 0644]
package/kernel/xr819/patches/001-activate-all-backports.patch [new file with mode: 0644]

diff --git a/package/kernel/xr819/Makefile b/package/kernel/xr819/Makefile
new file mode 100644 (file)
index 0000000..5426276
--- /dev/null
@@ -0,0 +1,51 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=xr819
+PKG_RELEASE=1
+
+PKG_LICENSE:=GPLv2
+PKG_LICENSE_FILES:=
+
+PKG_SOURCE_URL:=https://github.com/fifteenhex/xradio.git
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_DATE:=2025-02-06
+PKG_SOURCE_VERSION:=180aafb14191c78c1529d5a28ca58c7c9dcf2c55
+PKG_HASH:=e879304ce6c443b4e733d9c8049eba31178190d9590e524457146c58660af083
+
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/kernel.mk
+include $(INCLUDE_DIR)/package.mk
+
+define KernelPackage/xr819
+  SUBMENU:=Wireless Drivers
+  TITLE:=Xradio XR819 support
+  DEPENDS:=@TARGET_sunxi +kmod-mac80211 +xr819-firmware +@DRIVER_11N_SUPPORT
+  KCONFIG:= \
+       CONFIG_WLAN_VENDOR_XRADIO=m \
+       CONFIG_XRADIO_USE_EXTENSIONS=y
+  FILES:=$(PKG_BUILD_DIR)/xradio_wlan.ko
+  AUTOLOAD:=$(call AutoProbe,xradio_wlan)
+endef
+
+NOSTDINC_FLAGS = \
+       -I$(PKG_BUILD_DIR) \
+       -I$(STAGING_DIR)/usr/include/mac80211-backport/uapi \
+       -I$(STAGING_DIR)/usr/include/mac80211-backport \
+       -I$(STAGING_DIR)/usr/include/mac80211/uapi \
+       -I$(STAGING_DIR)/usr/include/mac80211 \
+       -include backport/autoconf.h \
+       -include backport/backport.h \
+       -Wno-error=address \
+       -Wno-error=stringop-overread
+
+define Build/Compile
+       +$(MAKE) $(PKG_JOBS) -C "$(LINUX_DIR)" \
+               $(KERNEL_MAKE_FLAGS) \
+               $(PKG_MAKE_FLAGS) \
+               M="$(PKG_BUILD_DIR)" \
+               NOSTDINC_FLAGS="$(NOSTDINC_FLAGS)" \
+               modules
+endef
+
+$(eval $(call KernelPackage,xr819))
diff --git a/package/kernel/xr819/patches/001-activate-all-backports.patch b/package/kernel/xr819/patches/001-activate-all-backports.patch
new file mode 100644 (file)
index 0000000..742eeed
--- /dev/null
@@ -0,0 +1,48 @@
+diff -ruN xr819.orig/main.c xr819-2025.02.06~180aafb1/main.c
+--- xr819.orig/main.c  2024-12-06 11:27:17.000000000 +0100
++++ xr819-2025.02.06~180aafb1/main.c   2025-02-11 23:21:02.799915833 +0100
+@@ -166,7 +166,7 @@
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 2, 0))
+       .wake_tx_queue          = ieee80211_handle_wake_tx_queue,
+ #endif
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 9, 0))
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 9, 0)) || 1
+        .add_chanctx = ieee80211_emulate_add_chanctx,
+        .remove_chanctx = ieee80211_emulate_remove_chanctx,
+        .change_chanctx = ieee80211_emulate_change_chanctx,
+diff -ruN xr819.orig/sta.c xr819-2025.02.06~180aafb1/sta.c
+--- xr819.orig/sta.c   2024-12-06 11:27:17.000000000 +0100
++++ xr819-2025.02.06~180aafb1/sta.c    2025-02-11 23:21:20.715764839 +0100
+@@ -117,7 +117,7 @@
+       return ret;
+ }
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 11, 0))
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 11, 0)) || 1
+ void xradio_stop(struct ieee80211_hw *dev, bool suspend)
+ #else
+ void xradio_stop(struct ieee80211_hw *dev)
+diff -ruN xr819.orig/sta.h xr819-2025.02.06~180aafb1/sta.h
+--- xr819.orig/sta.h   2024-12-06 11:27:17.000000000 +0100
++++ xr819-2025.02.06~180aafb1/sta.h    2025-02-11 23:21:13.835822818 +0100
+@@ -31,7 +31,7 @@
+ /* mac80211 API                                                               */
+ int xradio_start(struct ieee80211_hw *dev);
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 11, 0))
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 11, 0)) || 1
+ void xradio_stop(struct ieee80211_hw *dev, bool suspend);
+ #else
+ void xradio_stop(struct ieee80211_hw *dev);
+diff -ruN xr819.orig/tx.c xr819-2025.02.06~180aafb1/tx.c
+--- xr819.orig/tx.c    2024-12-06 11:27:17.000000000 +0100
++++ xr819-2025.02.06~180aafb1/tx.c     2025-02-11 23:20:50.052023304 +0100
+@@ -1268,7 +1268,7 @@
+                               txpriv->raw_link_id, txpriv->tid);
+               tx_policy_put(hw_priv, txpriv->rate_id);
+       }
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 7, 0))
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 7, 0)) || 1
+       ieee80211_tx_status_skb(hw_priv->hw, skb);
+ #else
+       ieee80211_tx_status(hw_priv->hw, skb);