diff --git a/doc/devices/FG-4GT-2SX_V2.0.md b/doc/devices/FG-4GT-2SX_V2.0.md
new file mode 100644
index 0000000..110bb67
--- /dev/null
+++ b/doc/devices/FG-4GT-2SX_V2.0.md
@@ -0,0 +1,39 @@
+# FG-4GT-2SX_V2.0
+
+Following is documentation for unmanaged switch marked as `FG-4GT-2SX_V2.0`.
+
+Original software is running UART on 9600 baud rate.
+
+## Brands
+
+* Ruiying RY-4GT-2SX
+
+
+
+## What works
+
+- All four 2.5GBASE-T RJ45 ports at 10/100/1000/2500 Mbps
+- Both SFP ports supporting 1G, 2.5G and 10G modules
+- LEDs
+
+## PCB overview
+
+**Board markings**
+
+- Top silkscreen: FG-4GT-2SX_V2.0
+
+Front panel
+
+
+
+Top side
+
+
+
+Bottom
+
+
+
+## Power supply
+
+Input power is delivered via barell plug, `12V 1A` adapter was provided.
diff --git a/doc/devices/photos/FG-4GT-2SX_V2.0/PCB-bottom.jpg b/doc/devices/photos/FG-4GT-2SX_V2.0/PCB-bottom.jpg
new file mode 100644
index 0000000..7c4c4b5
Binary files /dev/null and b/doc/devices/photos/FG-4GT-2SX_V2.0/PCB-bottom.jpg differ
diff --git a/doc/devices/photos/FG-4GT-2SX_V2.0/PCB-top.jpg b/doc/devices/photos/FG-4GT-2SX_V2.0/PCB-top.jpg
new file mode 100644
index 0000000..f24a90b
Binary files /dev/null and b/doc/devices/photos/FG-4GT-2SX_V2.0/PCB-top.jpg differ
diff --git a/doc/devices/photos/FG-4GT-2SX_V2.0/RY-4GT-2SX_label.jpg b/doc/devices/photos/FG-4GT-2SX_V2.0/RY-4GT-2SX_label.jpg
new file mode 100644
index 0000000..62f7b59
Binary files /dev/null and b/doc/devices/photos/FG-4GT-2SX_V2.0/RY-4GT-2SX_label.jpg differ
diff --git a/doc/devices/photos/FG-4GT-2SX_V2.0/chassis-front.jpg b/doc/devices/photos/FG-4GT-2SX_V2.0/chassis-front.jpg
new file mode 100644
index 0000000..73229e1
Binary files /dev/null and b/doc/devices/photos/FG-4GT-2SX_V2.0/chassis-front.jpg differ
diff --git a/doc/supported_devices.md b/doc/supported_devices.md
index 61f42d0..e86ac58 100644
--- a/doc/supported_devices.md
+++ b/doc/supported_devices.md
@@ -19,6 +19,7 @@ The following devices have been tested and are fully working:
| LIANGUO | SWTG024AS | No | [SWTG024AS-v2.0-17452](https://github.com/logicog/RTLPlayground/blob/main/doc/devices/SWTG024AS.md) | 0.5M | 4 + 2 |
| Lianguo | ZX-SWTGW215AS | Yes | [PCB-SWTG115AS-V2.0](https://github.com/logicog/RTLPlayground/blob/main/doc/devices/SWTGW215AS.md) | 2M | 5 + 1 |
| Mokerlink| ZX-SWTGW218AS | Yes | [SWTG118AS-V2.0-16029](https://github.com/logicog/RTLPlayground/blob/main/doc/devices/SWTGW218AS.md) | 2M | 8 + 1 |
+| Ruiying | RY-4GT-2SX | No | [FG-4GT-2SX_V2.0](https://github.com/logicog/RTLPlayground/blob/main/doc/devices/FG-4GT-2SX_V2.0.md) | 4M | 4 + 2 |
| Sodola | SL-SWTG124AS-D | Yes | [SWTG024AS-v2.0-17452](https://github.com/logicog/RTLPlayground/blob/main/doc/devices/SWTG024AS.md) | 2M | 4 + 2 |
| Steamemo | IG204-V1 | No | [PB-2131](https://github.com/logicog/RTLPlayground/blob/main/doc/devices/STEAMEMO_IG204_V1.md) | | 4 + 2 |
| TrendNet | TEG-S562 | No | [TEG-S563/EU H/W: V1.0R](https://github.com/logicog/RTLPlayground/blob/main/doc/devices/TEG-S562.md) | 2M | 4 + 2 |
diff --git a/machine.c b/machine.c
index 320c74c..091097a 100644
--- a/machine.c
+++ b/machine.c
@@ -1063,6 +1063,76 @@ void machine_custom_init(void) {
REG_SET(RTL837X_PIN_MUX_0, 0x30db68bf);
}
+#elif defined MACHINE_FG_4GT_2SX_V2_0
+__code const struct machine machine = {
+ .machine_name = "FG-4GT-2SX_V2.0",
+ .isRTL8373 = 0,
+ .min_port = 3,
+ .max_port = 8,
+ .n_sfp = 2,
+ .log_to_phys_port = {0, 0, 0, 6, 1, 2, 3, 4, 5},
+ .phys_to_log_port = {4, 5, 6, 7, 8, 3, 0, 0, 0},
+ .is_sfp = {0, 0, 0, 2, 0, 0, 0, 0, 1},
+
+ // Left SFP port
+ .sfp_port[0].pin_detect = GPIO38,
+ .sfp_port[0].pin_los = GPIO_NA,
+ .sfp_port[0].sds = 1,
+ .sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
+
+ // Right SFP port
+ .sfp_port[1].pin_detect = GPIO37,
+ .sfp_port[1].pin_los = GPIO_NA,
+ .sfp_port[1].sds = 0,
+ .sfp_port[1].i2c = { .sda = GPIO41_I2C_SDA3_MDIO1, .scl = GPIO40_I2C_SCL3_MDC1 },
+
+ .reset_pin = GPIO_NA,
+ .high_leds = { .mux = LED_27 | LED_28_SYS | LED_29, .enable = LED_28_SYS | LED_29 },
+ .port_led_set = { 0, 0, 0, 1, 0, 0, 0, 0, 1},
+ /* Ports 1-4 RJ45 use set 0, port 5-6 SFP uses set 1
+ * Ports 1-4: Green: 2.5GBit, Amber: 10/100/1000MBit
+ * Ports 5-6: Green: 100MBit-10GBit
+ */
+ .led_sets = {
+ {
+ LEDS_2G5 | LEDS_LINK | LEDS_ACT,
+ LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
+ 0,
+ LEDS_2G5 | LEDS_LINK | LEDS_ACT
+ },
+ {
+ LEDS_10G | LEDS_5G | LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
+ LEDS_10G | LEDS_LINK,
+ 0,
+ LEDS_COL | LEDS_DUPLEX
+ },
+ {
+ LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
+ LEDS_2G5 | LEDS_1G | LEDS_LINK,
+ LEDS_5G | LEDS_2G5 | LEDS_LINK | LEDS_ACT,
+ LEDS_10G | LEDS_LINK | LEDS_ACT
+ },
+ {
+ LEDS_TX,
+ LEDS_RX,
+ LEDS_10G | LEDS_TWO_PAIR_5G | LEDS_5G | LEDS_TWO_PAIR_2G5 |
+ LEDS_2G5 | LEDS_TWO_PAIR_1G | LEDS_1G | LEDS_500M | LEDS_100M | LEDS_10M | LEDS_ACT,
+ LEDS_10G | LEDS_TWO_PAIR_5G | LEDS_5G | LEDS_TWO_PAIR_2G5 |
+ LEDS_2G5 | LEDS_TWO_PAIR_1G | LEDS_1G | LEDS_500M | LEDS_100M | LEDS_10M | LEDS_LINK
+ },
+ },
+ .led_mux_custom = 1,
+ .led_mux = {
+ 0x0c, 0x0d, 0x0e, 0x10, 0x11, 0x12, 0x14, 0x3f, 0x15, 0x16,
+ 0x18, 0x0e, 0x19, 0x11, 0x12, 0x1a, 0x15, 0x16, 0x1c, 0x19,
+ 0x1a, 0x1d, 0x1d, 0x1e, 0x1e, 0x20, 0x21, 0x22
+ },
+ };
+
+void machine_custom_init(void) {
+ REG_SET(RTL837X_REG_LED_GLB_IO_EN, 0x7624155b);
+}
+
#else
#error "Please select a machine type in machine.h"
#endif
diff --git a/machine.h b/machine.h
index cb48aae..c3368f6 100644
--- a/machine.h
+++ b/machine.h
@@ -30,6 +30,7 @@
// #define MACHINE_PCB_SWTG024AS_A_2_0_1
// #define MACHINE_SWTG024AS_A_2_0_1_5C_1SFP
// #define MACHINE_SWTG024AS_V2_0
+// #define MACHINE_FG_4GT_2SX_V2_0
typedef struct {
// GPIO pins for SDA/SCL