From b28f58dbd4e5ccb0e8bd85ac6957b59dad3da938 Mon Sep 17 00:00:00 2001
From: Tom Herbers <mail@tomherbers.de>
Date: Thu, 8 Sep 2022 04:41:15 +0200
Subject: [PATCH] ath79-nand: add support for GL.iNet GL-XE300

The activated setup mode is indicated by the WLAN LED.

Co-authored-by: David Bauer <mail@david-bauer.net>
---
 docs/user/supported_devices.rst                    |  1 +
 .../luasrc/lib/gluon/upgrade/250-cellular          |  4 ++++
 .../luasrc/usr/lib/lua/gluon/platform.lua          |  1 +
 .../files/lib/gluon/setup-mode/rc.d/S96led         | 12 ++++++++++--
 .../luasrc/usr/lib/lua/gluon/setup-mode.lua        | 14 ++++++++++++++
 targets/ath79-nand                                 |  3 +++
 6 files changed, 33 insertions(+), 2 deletions(-)
 create mode 100644 package/gluon-setup-mode/luasrc/usr/lib/lua/gluon/setup-mode.lua

diff --git a/docs/user/supported_devices.rst b/docs/user/supported_devices.rst
index 54b8e26e6..79dfd7809 100644
--- a/docs/user/supported_devices.rst
+++ b/docs/user/supported_devices.rst
@@ -143,6 +143,7 @@ ath79-nand
 
   - GL-AR300M
   - GL-AR750S
+  - GL-XE300
 
 * Netgear
 
diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
index f428f67f4..b60d8e6aa 100755
--- a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
@@ -43,6 +43,10 @@ local function setup_ncm_qmi(devpath, control_type, delay)
 end
 
 if platform.match('ath79', 'nand', {
+	'glinet,gl-xe300',
+}) then
+	setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15)
+elseif platform.match('ath79', 'nand', {
 	'zte,mf281',
 }) then
 	setup_ncm_qmi('/dev/ttyACM0', 'ncm', 15)
diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
index 3301319e5..2f09a8ad5 100644
--- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
+++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
@@ -73,6 +73,7 @@ end
 function M.is_cellular_device()
 	if M.match('ath79', 'nand', {
 		'zte,mf281',
+		'glinet,gl-xe300',
 	}) then
 		return true
 	elseif M.match('ipq40xx', 'generic', {
diff --git a/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S96led b/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S96led
index c3ac6681d..c456278f5 100755
--- a/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S96led
+++ b/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S96led
@@ -3,18 +3,26 @@
 START=96
 
 start() {
+	local custom_led
+
 	/etc/init.d/led start
 
 	. /etc/diag.sh
 
 	get_status_led 2> /dev/null
 
-	if [ -z $status_led ]; then
+	if [ -z "$status_led" ]; then
 		status_led="$running"
 	fi
-	if [ -z $status_led ]; then
+
+	if [ -z "$status_led" ]; then
 		status_led="$boot"
 	fi
 
+	custom_led="$(lua -e 'print(require("gluon.setup-mode").get_status_led() or "")')"
+	if [ -z "$status_led" ]; then
+		status_led="$custom_led"
+	fi
+
 	status_led_set_timer 1000 300
 }
diff --git a/package/gluon-setup-mode/luasrc/usr/lib/lua/gluon/setup-mode.lua b/package/gluon-setup-mode/luasrc/usr/lib/lua/gluon/setup-mode.lua
new file mode 100644
index 000000000..3b107bf97
--- /dev/null
+++ b/package/gluon-setup-mode/luasrc/usr/lib/lua/gluon/setup-mode.lua
@@ -0,0 +1,14 @@
+local platform = require 'gluon.platform'
+
+
+local M = {}
+
+function M.get_status_led()
+	if platform.match('ath79', 'nand', {
+		'glinet,gl-xe300',
+	}) then
+		return "green:wlan"
+	end
+end
+
+return M
diff --git a/targets/ath79-nand b/targets/ath79-nand
index 757d24a12..7dff24536 100644
--- a/targets/ath79-nand
+++ b/targets/ath79-nand
@@ -23,6 +23,9 @@ device('gl.inet-gl-ar750s-nor', 'glinet_gl-ar750s-nor', {
 	packages = ATH10K_PACKAGES_QCA9887,
 })
 
+device('gl.inet-gl-xe300', 'glinet_gl-xe300', {
+	factory = false,
+})
 
 -- Netgear
 
-- 
GitLab