From 65707cfb4144d8ce6ff5d663127606a2025403d2 Mon Sep 17 00:00:00 2001 From: Yorick van Pelt Date: Wed, 23 Sep 2020 18:03:10 +0200 Subject: [PATCH] esp_eth_mac_esp32: optionally setup SMI GPIO's This enables passing smi_mdio_gpio_num = -1 to disable that signal Merges https://github.com/espressif/esp-idf/pull/5903 --- components/esp_eth/include/esp_eth_mac.h | 4 ++-- components/esp_eth/src/esp_eth_mac_esp32.c | 22 +++++++++++++--------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/components/esp_eth/include/esp_eth_mac.h b/components/esp_eth/include/esp_eth_mac.h index f12c66ae1f..a9052eee5c 100644 --- a/components/esp_eth/include/esp_eth_mac.h +++ b/components/esp_eth/include/esp_eth_mac.h @@ -298,8 +298,8 @@ typedef struct { uint32_t sw_reset_timeout_ms; /*!< Software reset timeout value (Unit: ms) */ uint32_t rx_task_stack_size; /*!< Stack size of the receive task */ uint32_t rx_task_prio; /*!< Priority of the receive task */ - int smi_mdc_gpio_num; /*!< SMI MDC GPIO number */ - int smi_mdio_gpio_num; /*!< SMI MDIO GPIO number */ + int smi_mdc_gpio_num; /*!< SMI MDC GPIO number, set to -1 could bypass the SMI GPIO configuration */ + int smi_mdio_gpio_num; /*!< SMI MDIO GPIO number, set to -1 could bypass the SMI GPIO configuration */ uint32_t flags; /*!< Flags that specify extra capability for mac driver */ } eth_mac_config_t; diff --git a/components/esp_eth/src/esp_eth_mac_esp32.c b/components/esp_eth/src/esp_eth_mac_esp32.c index d69d4a258a..47f05e68e4 100644 --- a/components/esp_eth/src/esp_eth_mac_esp32.c +++ b/components/esp_eth/src/esp_eth_mac_esp32.c @@ -312,15 +312,19 @@ static void emac_esp32_rx_task(void *arg) static void emac_esp32_init_smi_gpio(emac_esp32_t *emac) { - /* Setup SMI MDC GPIO */ - gpio_set_direction(emac->smi_mdc_gpio_num, GPIO_MODE_OUTPUT); - esp_rom_gpio_connect_out_signal(emac->smi_mdc_gpio_num, EMAC_MDC_O_IDX, false, false); - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[emac->smi_mdc_gpio_num], PIN_FUNC_GPIO); - /* Setup SMI MDIO GPIO */ - gpio_set_direction(emac->smi_mdio_gpio_num, GPIO_MODE_INPUT_OUTPUT); - esp_rom_gpio_connect_out_signal(emac->smi_mdio_gpio_num, EMAC_MDO_O_IDX, false, false); - esp_rom_gpio_connect_in_signal(emac->smi_mdio_gpio_num, EMAC_MDI_I_IDX, false); - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[emac->smi_mdio_gpio_num], PIN_FUNC_GPIO); + if (emac->smi_mdc_gpio_num >= 0) { + /* Setup SMI MDC GPIO */ + gpio_set_direction(emac->smi_mdc_gpio_num, GPIO_MODE_OUTPUT); + esp_rom_gpio_connect_out_signal(emac->smi_mdc_gpio_num, EMAC_MDC_O_IDX, false, false); + PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[emac->smi_mdc_gpio_num], PIN_FUNC_GPIO); + } + if (emac->smi_mdio_gpio_num >= 0) { + /* Setup SMI MDIO GPIO */ + gpio_set_direction(emac->smi_mdio_gpio_num, GPIO_MODE_INPUT_OUTPUT); + esp_rom_gpio_connect_out_signal(emac->smi_mdio_gpio_num, EMAC_MDO_O_IDX, false, false); + esp_rom_gpio_connect_in_signal(emac->smi_mdio_gpio_num, EMAC_MDI_I_IDX, false); + PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[emac->smi_mdio_gpio_num], PIN_FUNC_GPIO); + } } static esp_err_t emac_esp32_init(esp_eth_mac_t *mac)