esp32/network_lan: Add PHY_GENERIC device type.

Support the new PHY_GENERIC device type, added in ESP-IDF v5.4.0 [1].

This PHY driver was added to ESP-IDF to support "generic"/oddball PHY
LAN chips like the JL1101, which offer no features beyond the bare
802.3 PHY standard and don't actually need a chip-specific driver (see
discussion at [2]).

[1] https://github.com/espressif/esp-idf/commit/0738314308ad36a73601ddb8bb82f1dcbfe1f550
[2] https://github.com/espressif/esp-eth-drivers/pull/28

Signed-off-by: Elvis Pfutzenreuter <epxx@epxx.co>
diff --git a/docs/esp32/quickref.rst b/docs/esp32/quickref.rst
index 56d8b0e..4e70ff2 100644
--- a/docs/esp32/quickref.rst
+++ b/docs/esp32/quickref.rst
@@ -148,6 +148,7 @@
 - ``mdc`` and ``mdio`` - :class:`machine.Pin` objects (or integers) specifying
   the MDC and MDIO pins.
 - ``phy_type`` - Select the PHY device type. Supported devices are
+  ``PHY_GENERIC``,
   ``PHY_LAN8710``, ``PHY_LAN8720``, ``PHY_IP101``, ``PHY_RTL8201``,
   ``PHY_DP83848``, ``PHY_KSZ8041`` and ``PHY_KSZ8081``. These values are all
   constants defined in the ``network`` module.
diff --git a/ports/esp32/modnetwork.h b/ports/esp32/modnetwork.h
index 4debea1..ba69d5c 100644
--- a/ports/esp32/modnetwork.h
+++ b/ports/esp32/modnetwork.h
@@ -35,12 +35,22 @@
 #define PHY_LAN867X_ENABLED (0)
 #endif
 
+// PHY_GENERIC support requires newer IDF version
+#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 4, 0) && CONFIG_IDF_TARGET_ESP32
+#define PHY_GENERIC_ENABLED (1)
+#else
+#define PHY_GENERIC_ENABLED (0)
+#endif
+
 enum {
     // PHYs supported by the internal Ethernet MAC:
     PHY_LAN8710, PHY_LAN8720, PHY_IP101, PHY_RTL8201, PHY_DP83848, PHY_KSZ8041, PHY_KSZ8081,
     #if PHY_LAN867X_ENABLED
     PHY_LAN8670,
     #endif
+    #if PHY_GENERIC_ENABLED
+    PHY_GENERIC,
+    #endif
     // PHYs which are actually SPI Ethernet MAC+PHY chips:
     PHY_KSZ8851SNL = 100, PHY_DM9051, PHY_W5500
 };
diff --git a/ports/esp32/modnetwork_globals.h b/ports/esp32/modnetwork_globals.h
index 9909e7c..12252dd 100644
--- a/ports/esp32/modnetwork_globals.h
+++ b/ports/esp32/modnetwork_globals.h
@@ -50,6 +50,9 @@
 #if PHY_LAN867X_ENABLED
 { MP_ROM_QSTR(MP_QSTR_PHY_LAN8670), MP_ROM_INT(PHY_LAN8670) },
 #endif
+#if PHY_GENERIC_ENABLED
+{ MP_ROM_QSTR(MP_QSTR_PHY_GENERIC), MP_ROM_INT(PHY_GENERIC) },
+#endif
 
 #if CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL
 { MP_ROM_QSTR(MP_QSTR_PHY_KSZ8851SNL), MP_ROM_INT(PHY_KSZ8851SNL) },
diff --git a/ports/esp32/network_lan.c b/ports/esp32/network_lan.c
index bf6b565..309ee0b 100644
--- a/ports/esp32/network_lan.c
+++ b/ports/esp32/network_lan.c
@@ -163,6 +163,9 @@
         #if PHY_LAN867X_ENABLED
         args[ARG_phy_type].u_int != PHY_LAN8670 &&
         #endif
+        #if PHY_GENERIC_ENABLED
+        args[ARG_phy_type].u_int != PHY_GENERIC &&
+        #endif
         #if CONFIG_ETH_USE_SPI_ETHERNET
         #if CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL
         args[ARG_phy_type].u_int != PHY_KSZ8851SNL &&
@@ -243,6 +246,11 @@
             self->phy = esp_eth_phy_new_lan867x(&phy_config);
             break;
         #endif
+        #if PHY_GENERIC_ENABLED
+        case PHY_GENERIC:
+            self->phy = esp_eth_phy_new_generic(&phy_config);
+            break;
+        #endif
         #endif // CONFIG_IDF_TARGET_ESP32
         #if CONFIG_ETH_USE_SPI_ETHERNET
         #if CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL