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] 0738314308
[2] https://github.com/espressif/esp-eth-drivers/pull/28

Signed-off-by: Elvis Pfutzenreuter <epxx@epxx.co>
This commit is contained in:
Elvis Pfutzenreuter
2025-05-01 14:30:04 -03:00
parent 90aeac800a
commit ecbbc512b2
4 changed files with 22 additions and 0 deletions

View File

@@ -148,6 +148,7 @@ Required keyword arguments for the constructor:
- ``mdc`` and ``mdio`` - :class:`machine.Pin` objects (or integers) specifying - ``mdc`` and ``mdio`` - :class:`machine.Pin` objects (or integers) specifying
the MDC and MDIO pins. the MDC and MDIO pins.
- ``phy_type`` - Select the PHY device type. Supported devices are - ``phy_type`` - Select the PHY device type. Supported devices are
``PHY_GENERIC``,
``PHY_LAN8710``, ``PHY_LAN8720``, ``PHY_IP101``, ``PHY_RTL8201``, ``PHY_LAN8710``, ``PHY_LAN8720``, ``PHY_IP101``, ``PHY_RTL8201``,
``PHY_DP83848``, ``PHY_KSZ8041`` and ``PHY_KSZ8081``. These values are all ``PHY_DP83848``, ``PHY_KSZ8041`` and ``PHY_KSZ8081``. These values are all
constants defined in the ``network`` module. constants defined in the ``network`` module.

View File

@@ -35,12 +35,22 @@
#define PHY_LAN867X_ENABLED (0) #define PHY_LAN867X_ENABLED (0)
#endif #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 { enum {
// PHYs supported by the internal Ethernet MAC: // PHYs supported by the internal Ethernet MAC:
PHY_LAN8710, PHY_LAN8720, PHY_IP101, PHY_RTL8201, PHY_DP83848, PHY_KSZ8041, PHY_KSZ8081, PHY_LAN8710, PHY_LAN8720, PHY_IP101, PHY_RTL8201, PHY_DP83848, PHY_KSZ8041, PHY_KSZ8081,
#if PHY_LAN867X_ENABLED #if PHY_LAN867X_ENABLED
PHY_LAN8670, PHY_LAN8670,
#endif #endif
#if PHY_GENERIC_ENABLED
PHY_GENERIC,
#endif
// PHYs which are actually SPI Ethernet MAC+PHY chips: // PHYs which are actually SPI Ethernet MAC+PHY chips:
PHY_KSZ8851SNL = 100, PHY_DM9051, PHY_W5500 PHY_KSZ8851SNL = 100, PHY_DM9051, PHY_W5500
}; };

View File

@@ -50,6 +50,9 @@
#if PHY_LAN867X_ENABLED #if PHY_LAN867X_ENABLED
{ MP_ROM_QSTR(MP_QSTR_PHY_LAN8670), MP_ROM_INT(PHY_LAN8670) }, { MP_ROM_QSTR(MP_QSTR_PHY_LAN8670), MP_ROM_INT(PHY_LAN8670) },
#endif #endif
#if PHY_GENERIC_ENABLED
{ MP_ROM_QSTR(MP_QSTR_PHY_GENERIC), MP_ROM_INT(PHY_GENERIC) },
#endif
#if CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL #if CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL
{ MP_ROM_QSTR(MP_QSTR_PHY_KSZ8851SNL), MP_ROM_INT(PHY_KSZ8851SNL) }, { MP_ROM_QSTR(MP_QSTR_PHY_KSZ8851SNL), MP_ROM_INT(PHY_KSZ8851SNL) },

View File

@@ -163,6 +163,9 @@ static mp_obj_t get_lan(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_ar
#if PHY_LAN867X_ENABLED #if PHY_LAN867X_ENABLED
args[ARG_phy_type].u_int != PHY_LAN8670 && args[ARG_phy_type].u_int != PHY_LAN8670 &&
#endif #endif
#if PHY_GENERIC_ENABLED
args[ARG_phy_type].u_int != PHY_GENERIC &&
#endif
#if CONFIG_ETH_USE_SPI_ETHERNET #if CONFIG_ETH_USE_SPI_ETHERNET
#if CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL #if CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL
args[ARG_phy_type].u_int != PHY_KSZ8851SNL && args[ARG_phy_type].u_int != PHY_KSZ8851SNL &&
@@ -243,6 +246,11 @@ static mp_obj_t get_lan(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_ar
self->phy = esp_eth_phy_new_lan867x(&phy_config); self->phy = esp_eth_phy_new_lan867x(&phy_config);
break; break;
#endif #endif
#if PHY_GENERIC_ENABLED
case PHY_GENERIC:
self->phy = esp_eth_phy_new_generic(&phy_config);
break;
#endif
#endif // CONFIG_IDF_TARGET_ESP32 #endif // CONFIG_IDF_TARGET_ESP32
#if CONFIG_ETH_USE_SPI_ETHERNET #if CONFIG_ETH_USE_SPI_ETHERNET
#if CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL #if CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL