diff --git a/doc/devices/2M-PCB51-ML-V1_1.md b/doc/devices/2M-PCB51-ML-V1_1.md
new file mode 100644
index 00000000..d2c6cb9c
--- /dev/null
+++ b/doc/devices/2M-PCB51-ML-V1_1.md
@@ -0,0 +1,32 @@
+# MokerLink POE-2G080110GS
+
+The `POE-2G080110GS` is an unmanaged 8x2.5G RJ45 and 1xSFP+ PoE switch sold by Mokerlink. There is also a `POE-2G080110GSM` managed version of the switch which may be similar but this has not been verified on actual hardware.
+
+## Brands
+| Brand | Type |Managed| PCB | Flash | Chip RTL |
+|--------|------------------|-------|------------------|-----------------|---------------|
+| Mokerlink | POE-2G080110GS | No | 2M-PCB51-ML-V1.1 | 4MB (W25Q32JV) | 8373N + 8224N |
+
+## Hardware overview
+Front
+
+
+
+Label
+
+
+
+The stock firmware from a POE-2G080110GS device had a sha256sum of `4c280853465eaad80e1772075c0f2d29c11fb8c561547f06353d3a5443c388e9`.
+
+### PCB
+
+Top silkscreen is marked `2M-PCB51-ML-V1.1`. PoE is provided by RTL8238C. Flash chip is 4 MB Winbond 25Q32JV (U8).
+
+
+
+> [!CAUTION]
+> This device operates on mains voltage, which can be a dangerous or potentially lethal hazard. Even after the device is unplugged, high-voltage capacitors can remain charged afterward and may still shock you. Do not attempt to open/disassemble a mains powered device unless you understand how to do so safely. Also, opening the device may void your warranty.
+
+## Notes
+
+The stock firmware blinks both the 2.5G and 1G LEDs on activity, despite the front of the device indicating that each LED should be independent. The `POE_2G080110GS` machine config behaves as the front of the device indicates (and what seems more logical) -- each port LED turns on and blinks independently.
diff --git a/doc/devices/photos/POE-2G080110GS/POE-2G080110GS-front.jpg b/doc/devices/photos/POE-2G080110GS/POE-2G080110GS-front.jpg
new file mode 100644
index 00000000..3728f84e
Binary files /dev/null and b/doc/devices/photos/POE-2G080110GS/POE-2G080110GS-front.jpg differ
diff --git a/doc/devices/photos/POE-2G080110GS/POE-2G080110GS-label.jpg b/doc/devices/photos/POE-2G080110GS/POE-2G080110GS-label.jpg
new file mode 100644
index 00000000..879d5afe
Binary files /dev/null and b/doc/devices/photos/POE-2G080110GS/POE-2G080110GS-label.jpg differ
diff --git a/doc/devices/photos/POE-2G080110GS/POE-2G080110GS-pcb.jpg b/doc/devices/photos/POE-2G080110GS/POE-2G080110GS-pcb.jpg
new file mode 100644
index 00000000..30697f68
Binary files /dev/null and b/doc/devices/photos/POE-2G080110GS/POE-2G080110GS-pcb.jpg differ
diff --git a/doc/supported_devices.md b/doc/supported_devices.md
index 3cdd1ecc..23ddf10e 100644
--- a/doc/supported_devices.md
+++ b/doc/supported_devices.md
@@ -23,6 +23,7 @@ The following devices have been tested and are fully working:
| Lianguo | ZX-SWTGW215AS | Yes | [PCB-SWTG115AS-V2.0 / PCB-SWTG115AS-V2.1](devices/SWTGW215AS.md) | 2M | 5 + 1 |
| Mokerlink| 2G040210GSM | Yes | [2M-PCB43-V1.1](devices/2M-PCB43-V1.1.md) | | 4 + 2 |
| Mokerlink| ZX-SWTGW218AS | Yes | [SWTG118AS-V2.0-16029](devices/SWTGW218AS.md) | 2M | 8 + 1 |
+| MokerLink| POE-2G080110GS | No | [2M-PCB51-ML-V1.1](devices/2M-PCB51-ML-V1_1.md) | 4M | 8 + 1 |
| Ruiying | RY-4GT-2SX | No | [FG-4GT-2SX_V2.0](devices/FG-4GT-2SX_V2.0.md) | 4M | 4 + 2 |
| Ruiying | RY-8GT-1SX | No | [FG-8GT-1SX](devices/FG-8GT-1SX.md) | 1M | 8 + 1 |
| SiscoLink | SL-G0402F | No | [PCB-K0402WS-V3.0](devices/PCB-K0402WS-V3.0.md) | | 4 + 2 |
diff --git a/machine.c b/machine.c
index dcc34844..e1ff51a6 100644
--- a/machine.c
+++ b/machine.c
@@ -1145,6 +1145,50 @@ __code const struct machine machine = {
},
};
+#elif defined MACHINE_POE_2G080110GS
+__code const struct machine machine = {
+ .machine_name = "MokerLink POE-2G080110GS",
+ .isRTL8373 = 1,
+ .min_port = 0,
+ .max_port = 8,
+ .n_sfp = 1,
+ .log_to_phys_port = {1, 2, 3, 4, 5, 6, 7, 8, 9},
+ .phys_to_log_port = {0, 1, 2, 3, 4, 5, 6, 7, 8},
+ .is_sfp = {0, 0, 0, 0, 0, 0, 0, 0, 1},
+ .sfp_port[0].pin_detect = GPIO30_ACL_BIT3_EN,
+ .sfp_port[0].pin_los = GPIO37,
+ .sfp_port[0].pin_tx_disable = GPIO_NA,
+ .sfp_port[0].sds = 1,
+ .sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
+ .reset_pin = GPIO_NA,
+ .high_leds = { .mux = LED_27 | LED_29, .enable = LED_28_SYS | LED_29 },
+ .port_led_set = { 0, 0, 0, 0, 0, 0, 0, 0, 1},
+ .led_sets = {
+ {
+ /* SET0: RJ45 2.5G = amber, 1G/100M/10M = green */
+ LEDS_2G5 | LEDS_LINK | LEDS_ACT, /* amber */
+ LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT, /* green */
+ 0,
+ 0
+ },
+ {
+ /* SET1: SFP+ port = green */
+ LEDS_2G5 | LEDS_TWO_PAIR_1G | LEDS_1G | LEDS_500M | LEDS_100M | LEDS_10M |
+ LEDS_LINK | LEDS_ACT | LEDS_10G | LEDS_TWO_PAIR_5G | LEDS_5G | LEDS_TWO_PAIR_2G5,
+ 0,
+ 0,
+ 0
+ }
+ },
+ .led_mux_custom = 1,
+ .led_mux = { 0x00, 0x01, 0x04, 0x05, 0x08,
+ 0x09, 0x0c, 0x09, 0x0d, 0x10,
+ 0x11, 0x0e, 0x14, 0x11, 0x12,
+ 0x15, 0x15, 0x16, 0x18, 0x19,
+ 0x1a, 0x19, 0x1d, 0x1e, 0x1c,
+ 0x1d, 0x20, 0x21 },
+};
+
#else
#error "Please select a machine type in machine.h"
#endif
diff --git a/machine.h b/machine.h
index 91c4b1ff..fd882229 100644
--- a/machine.h
+++ b/machine.h
@@ -44,6 +44,7 @@
// #define MACHINE_SWTG024AS_V2_0
// #define MACHINE_FG_4GT_2SX_V2_0
// #define MACHINE_FG_8GT_1SX
+// #define MACHINE_POE_2G080110GS
typedef struct {
// GPIO pins for SDA/SCL