Skip to content

Commit d30e4d9

Browse files
committed
Merge branch 'feat/eth_gpio' into 'master'
feat(esp_eth): new gpio init strategy Closes IDF-11128 See merge request espressif/esp-idf!35827
2 parents 9ede4c2 + 5429cc1 commit d30e4d9

File tree

14 files changed

+129
-86
lines changed

14 files changed

+129
-86
lines changed

components/esp_eth/src/mac/esp_eth_mac_esp_gpio.c

Lines changed: 66 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@ static esp_err_t emac_esp_gpio_matrix_init(gpio_num_t gpio_num, uint32_t signal_
3232
ESP_LOGD(TAG, "%s skipping signal in_idx %" PRIu32 ", out_idx %" PRIu32, __func__, signal_in_idx, signal_out_idx);
3333
return ESP_OK;
3434
}
35-
ESP_RETURN_ON_ERROR(gpio_set_direction(gpio_num, mode), TAG, "failed to set direction %i at GPIO #%i", mode, gpio_num);
3635
switch(mode) {
3736
case GPIO_MODE_INPUT:
3837
ESP_RETURN_ON_FALSE(signal_in_idx != SIG_GPIO_OUT_IDX, ESP_ERR_NOT_SUPPORTED,
3938
TAG, "requested periph signal cannot be connect via GPIO Matrix");
4039
ESP_RETURN_ON_FALSE(esp_gpio_is_reserved(BIT64(gpio_num)) == false, ESP_ERR_INVALID_STATE,
4140
TAG, "GPIO %i is reserved", gpio_num);
41+
gpio_input_enable(gpio_num);
4242
esp_rom_gpio_connect_in_signal(gpio_num, signal_in_idx, false);
4343
break;
4444
case GPIO_MODE_OUTPUT:
@@ -55,6 +55,7 @@ static esp_err_t emac_esp_gpio_matrix_init(gpio_num_t gpio_num, uint32_t signal_
5555
TAG, "requested periph signal cannot be connect via GPIO Matrix");
5656
ESP_RETURN_ON_FALSE((esp_gpio_reserve(BIT64(gpio_num)) & BIT64(gpio_num)) == 0, ESP_ERR_INVALID_STATE,
5757
TAG, "GPIO %i is already reserved", gpio_num);
58+
gpio_input_enable(gpio_num);
5859
esp_rom_gpio_connect_out_signal(gpio_num, signal_out_idx, false, false);
5960
esp_rom_gpio_connect_in_signal(gpio_num, signal_in_idx, false);
6061
break;
@@ -67,7 +68,7 @@ static esp_err_t emac_esp_gpio_matrix_init(gpio_num_t gpio_num, uint32_t signal_
6768
return ESP_OK;
6869
}
6970

70-
static esp_err_t emac_esp_iomux_init(gpio_num_t gpio_num, const emac_iomux_info_t *iomux_info, bool is_input)
71+
static esp_err_t emac_esp_iomux_init(gpio_num_t gpio_num, const emac_iomux_info_t *iomux_info, uint32_t signal_idx, bool is_input)
7172
{
7273
// silently skip undefined iomux functions (for example, ESP32 does not use MII COL_IN/CRS_IN)
7374
if (iomux_info == NULL) {
@@ -81,16 +82,23 @@ static esp_err_t emac_esp_iomux_init(gpio_num_t gpio_num, const emac_iomux_info_
8182
}
8283
// loop over target iomux_info until reached end of list indicated by invalid GPIO num
8384
while (iomux_info->gpio_num != GPIO_NUM_MAX) {
84-
// if requested GPIO number can be IO muxed or select single pad that can be muxed on the target
85+
// if requested GPIO number can be IO muxed or select the only pad that can be muxed on the target
8586
if(gpio_num == iomux_info->gpio_num || gpio_num == GPIO_NUM_MAX) {
8687
ESP_RETURN_ON_FALSE((esp_gpio_reserve(BIT64(iomux_info->gpio_num)) & BIT64(iomux_info->gpio_num)) == 0, ESP_ERR_INVALID_STATE,
8788
TAG, "GPIO %i is already reserved", iomux_info->gpio_num);
8889
s_emac_esp_used_gpio_mask |= BIT64(iomux_info->gpio_num);
89-
ESP_RETURN_ON_ERROR(gpio_func_sel(iomux_info->gpio_num, iomux_info->func), TAG, "failed to set GPIO function at GPIO %i", iomux_info->gpio_num);
9090
if (is_input) {
91-
PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[iomux_info->gpio_num]);
91+
ESP_RETURN_ON_ERROR(gpio_func_sel(iomux_info->gpio_num, iomux_info->func), TAG, "failed to set GPIO function at GPIO %i", iomux_info->gpio_num);
92+
// if the signal can be also connected via IO matrix, disconnect it (SIG_GPIO_OUT_IDX indicates no IO matrix)
93+
if (signal_idx != SIG_GPIO_OUT_IDX) {
94+
// enable input and disconnect from IO Matrix
95+
gpio_iomux_in(iomux_info->gpio_num, signal_idx);
96+
} else {
97+
// just enable input
98+
gpio_input_enable(iomux_info->gpio_num);
99+
}
92100
} else {
93-
PIN_INPUT_DISABLE(GPIO_PIN_MUX_REG[iomux_info->gpio_num]);
101+
gpio_iomux_out(iomux_info->gpio_num, iomux_info->func, false);
94102
}
95103
ESP_RETURN_ON_ERROR(gpio_set_pull_mode(iomux_info->gpio_num, GPIO_FLOATING),
96104
TAG, "failed to set pull mode at GPIO %i", iomux_info->gpio_num);
@@ -158,69 +166,71 @@ esp_err_t emac_esp_iomux_init_mii(const eth_mac_mii_gpio_config_t *mii_gpio)
158166
{
159167
ESP_RETURN_ON_FALSE(emac_mii_iomux_pins.clk_tx != NULL, ESP_ERR_NOT_SUPPORTED, TAG, "target does not support MII IOMUX");
160168

161-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, tx_clk_num), emac_mii_iomux_pins.clk_tx, true),
162-
TAG, "invalid TX_CLK GPIO number");
163-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, tx_en_num), emac_mii_iomux_pins.tx_en, false),
164-
TAG, "invalid TX_EN GPIO number");
165-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, txd0_num), emac_mii_iomux_pins.txd0, false),
166-
TAG, "invalid TXD0 GPIO number");
167-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, txd1_num), emac_mii_iomux_pins.txd1, false),
168-
TAG, "invalid TXD1 GPIO number");
169-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, txd2_num), emac_mii_iomux_pins.txd2, false),
170-
TAG, "invalid TXD2 GPIO number");
171-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, txd3_num), emac_mii_iomux_pins.txd3, false),
172-
TAG, "invalid TXD3 GPIO number");
173-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, rx_clk_num), emac_mii_iomux_pins.clk_rx, true),
174-
TAG, "invalid RX_CLK GPIO number");
175-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, rx_dv_num), emac_mii_iomux_pins.rx_dv, true),
176-
TAG, "invalid RX_DV GPIO number");
177-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, rxd0_num), emac_mii_iomux_pins.rxd0, true),
178-
TAG, "invalid RXD0 GPIO number");
179-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, rxd1_num), emac_mii_iomux_pins.rxd1, true),
180-
TAG, "invalid RXD1 GPIO number");
181-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, rxd2_num), emac_mii_iomux_pins.rxd2, true),
182-
TAG, "invalid RXD2 GPIO number");
183-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, rxd3_num), emac_mii_iomux_pins.rxd3, true),
184-
TAG, "invalid RXD3 GPIO number");
185-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, col_in_num), emac_mii_iomux_pins.col_in, true),
186-
TAG, "invalid COL_IN GPIO number");
187-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, crs_in_num), emac_mii_iomux_pins.crs_in, true),
188-
TAG, "invalid CRS_IN GPIO number");
169+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, tx_clk_num), emac_mii_iomux_pins.clk_tx,
170+
emac_io_idx.mii_tx_clk_i_idx, true), TAG, "invalid TX_CLK GPIO number");
171+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, tx_en_num), emac_mii_iomux_pins.tx_en,
172+
emac_io_idx.mii_tx_en_o_idx, false), TAG, "invalid TX_EN GPIO number");
173+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, txd0_num), emac_mii_iomux_pins.txd0,
174+
emac_io_idx.mii_txd0_o_idx, false), TAG, "invalid TXD0 GPIO number");
175+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, txd1_num), emac_mii_iomux_pins.txd1,
176+
emac_io_idx.mii_txd1_o_idx, false), TAG, "invalid TXD1 GPIO number");
177+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, txd2_num), emac_mii_iomux_pins.txd2,
178+
emac_io_idx.mii_txd2_o_idx, false), TAG, "invalid TXD2 GPIO number");
179+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, txd3_num), emac_mii_iomux_pins.txd3,
180+
emac_io_idx.mii_txd3_o_idx, false), TAG, "invalid TXD3 GPIO number");
181+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, rx_clk_num), emac_mii_iomux_pins.clk_rx,
182+
emac_io_idx.mii_rx_clk_i_idx, true), TAG, "invalid RX_CLK GPIO number");
183+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, rx_dv_num), emac_mii_iomux_pins.rx_dv,
184+
emac_io_idx.mii_rx_dv_i_idx, true), TAG, "invalid RX_DV GPIO number");
185+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, rxd0_num), emac_mii_iomux_pins.rxd0,
186+
emac_io_idx.mii_rxd0_i_idx, true), TAG, "invalid RXD0 GPIO number");
187+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, rxd1_num), emac_mii_iomux_pins.rxd1,
188+
emac_io_idx.mii_rxd1_i_idx, true), TAG, "invalid RXD1 GPIO number");
189+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, rxd2_num), emac_mii_iomux_pins.rxd2,
190+
emac_io_idx.mii_rxd2_i_idx, true), TAG, "invalid RXD2 GPIO number");
191+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, rxd3_num), emac_mii_iomux_pins.rxd3,
192+
emac_io_idx.mii_rxd3_i_idx, true), TAG, "invalid RXD3 GPIO number");
193+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, col_in_num), emac_mii_iomux_pins.col_in,
194+
emac_io_idx.mii_col_i_idx, true), TAG, "invalid COL_IN GPIO number");
195+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(mii_gpio, crs_in_num), emac_mii_iomux_pins.crs_in,
196+
emac_io_idx.mii_crs_i_idx, true), TAG, "invalid CRS_IN GPIO number");
189197
return ESP_OK;
190198
}
191199

192200
esp_err_t emac_esp_iomux_rmii_clk_input(int num)
193201
{
194202
ESP_RETURN_ON_FALSE(emac_rmii_iomux_pins.clki != NULL, ESP_ERR_NOT_SUPPORTED, TAG, "target does not support RMII CLKI IOMUX");
195203

196-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(num, emac_rmii_iomux_pins.clki, true), TAG, "invalid RMII CLK input GPIO number");
204+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(num, emac_rmii_iomux_pins.clki, emac_io_idx.rmii_refclk_i_idx, true),
205+
TAG, "invalid RMII CLK input GPIO number");
197206
return ESP_OK;
198207
}
199208

200209
esp_err_t emac_esp_iomux_rmii_clk_ouput(int num)
201210
{
202211
ESP_RETURN_ON_FALSE(emac_rmii_iomux_pins.clko != NULL, ESP_ERR_NOT_SUPPORTED, TAG, "target does not support RMII CLKO IOMUX");
203212

204-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(num, emac_rmii_iomux_pins.clko, false), TAG, "invalid RMII CLK output GPIO number");
213+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(num, emac_rmii_iomux_pins.clko, emac_io_idx.rmii_refclk_o_idx, false),
214+
TAG, "invalid RMII CLK output GPIO number");
205215
return ESP_OK;
206216
}
207217

208218
esp_err_t emac_esp_iomux_init_rmii(const eth_mac_rmii_gpio_config_t *rmii_gpio)
209219
{
210220
ESP_RETURN_ON_FALSE(emac_rmii_iomux_pins.clki != NULL, ESP_ERR_NOT_SUPPORTED, TAG, "target does not support RMII IOMUX");
211221

212-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(rmii_gpio, tx_en_num), emac_rmii_iomux_pins.tx_en, false),
213-
TAG, "invalid TX_EN GPIO number");
214-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(rmii_gpio, txd0_num), emac_rmii_iomux_pins.txd0, false),
215-
TAG, "invalid TXD0 GPIO number");
216-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(rmii_gpio, txd1_num), emac_rmii_iomux_pins.txd1, false),
217-
TAG, "invalid TXD1 GPIO number");
218-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(rmii_gpio, crs_dv_num), emac_rmii_iomux_pins.crs_dv, true),
219-
TAG,"invalid CRS_DV GPIO number");
220-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(rmii_gpio, rxd0_num), emac_rmii_iomux_pins.rxd0, true),
221-
TAG,"invalid RXD0 GPIO number");
222-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(rmii_gpio, rxd1_num), emac_rmii_iomux_pins.rxd1, true),
223-
TAG,"invalid RXD1 GPIO number");
222+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(rmii_gpio, tx_en_num), emac_rmii_iomux_pins.tx_en,
223+
emac_io_idx.mii_tx_en_o_idx, false), TAG, "invalid TX_EN GPIO number");
224+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(rmii_gpio, txd0_num), emac_rmii_iomux_pins.txd0,
225+
emac_io_idx.mii_txd0_o_idx, false), TAG, "invalid TXD0 GPIO number");
226+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(rmii_gpio, txd1_num), emac_rmii_iomux_pins.txd1,
227+
emac_io_idx.mii_txd1_o_idx, false), TAG, "invalid TXD1 GPIO number");
228+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(rmii_gpio, crs_dv_num), emac_rmii_iomux_pins.crs_dv,
229+
emac_io_idx.mii_crs_i_idx, true), TAG,"invalid CRS_DV GPIO number");
230+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(rmii_gpio, rxd0_num), emac_rmii_iomux_pins.rxd0,
231+
emac_io_idx.mii_rxd0_i_idx, true), TAG,"invalid RXD0 GPIO number");
232+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(GET_GPIO_OR_SINGLE(rmii_gpio, rxd1_num), emac_rmii_iomux_pins.rxd1,
233+
emac_io_idx.mii_rxd1_i_idx, true), TAG,"invalid RXD1 GPIO number");
224234

225235
return ESP_OK;
226236
}
@@ -229,31 +239,35 @@ esp_err_t emac_esp_iomux_rmii_init_tx_er(int num)
229239
{
230240
ESP_RETURN_ON_FALSE(emac_rmii_iomux_pins.tx_er != NULL, ESP_ERR_NOT_SUPPORTED, TAG, "target does not support RMII TX_ER IOMUX");
231241

232-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(num, emac_rmii_iomux_pins.tx_er, false), TAG, "invalid TX_ER GPIO number");
242+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(num, emac_rmii_iomux_pins.tx_er, emac_io_idx.mii_tx_er_o_idx, false),
243+
TAG, "invalid TX_ER GPIO number");
233244
return ESP_OK;
234245
}
235246

236247
esp_err_t emac_esp_iomux_rmii_init_rx_er(int num)
237248
{
238249
ESP_RETURN_ON_FALSE(emac_rmii_iomux_pins.rx_er != NULL, ESP_ERR_NOT_SUPPORTED, TAG, "target does not support RMII RX_ER IOMUX");
239250

240-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(num, emac_rmii_iomux_pins.rx_er, true), TAG, "invalid RX_ER GPIO number");
251+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(num, emac_rmii_iomux_pins.rx_er, emac_io_idx.mii_rx_er_i_idx, true),
252+
TAG, "invalid RX_ER GPIO number");
241253
return ESP_OK;
242254
}
243255

244256
esp_err_t emac_esp_iomux_mii_init_tx_er(int num)
245257
{
246258
ESP_RETURN_ON_FALSE(emac_mii_iomux_pins.tx_er != NULL, ESP_ERR_NOT_SUPPORTED, TAG, "target does not support MII TX_ER IOMUX");
247259

248-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(num, emac_mii_iomux_pins.tx_er, false), TAG, "invalid TX_ER GPIO number");
260+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(num, emac_mii_iomux_pins.tx_er, emac_io_idx.mii_tx_er_o_idx, false),
261+
TAG, "invalid TX_ER GPIO number");
249262
return ESP_OK;
250263
}
251264

252265
esp_err_t emac_esp_iomux_mii_init_rx_er(int num)
253266
{
254267
ESP_RETURN_ON_FALSE(emac_mii_iomux_pins.rx_er != NULL, ESP_ERR_NOT_SUPPORTED, TAG, "target does not support RMII RX_ER IOMUX");
255268

256-
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(num, emac_mii_iomux_pins.rx_er, true), TAG, "invalid RX_ER GPIO number");
269+
ESP_RETURN_ON_ERROR(emac_esp_iomux_init(num, emac_mii_iomux_pins.rx_er, emac_io_idx.mii_rx_er_i_idx, true),
270+
TAG, "invalid RX_ER GPIO number");
257271
return ESP_OK;
258272
}
259273

components/esp_eth/src/phy/esp_eth_phy_802_3.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@
99
#include "esp_log.h"
1010
#include "esp_check.h"
1111
#include "esp_eth.h"
12+
#include "esp_private/gpio.h"
1213
#include "freertos/FreeRTOS.h"
1314
#include "freertos/task.h"
1415
#include "driver/gpio.h"
15-
#include "esp_rom_gpio.h"
16+
#include "soc/io_mux_reg.h"
1617
#include "esp_rom_sys.h"
1718
#include "esp_eth_phy_802_3.h"
1819

@@ -440,9 +441,9 @@ esp_err_t esp_eth_phy_802_3_del(phy_802_3_t *phy_802_3)
440441
esp_err_t esp_eth_phy_802_3_reset_hw(phy_802_3_t *phy_802_3, uint32_t reset_assert_us)
441442
{
442443
if (phy_802_3->reset_gpio_num >= 0) {
443-
esp_rom_gpio_pad_select_gpio(phy_802_3->reset_gpio_num);
444-
gpio_set_direction(phy_802_3->reset_gpio_num, GPIO_MODE_OUTPUT);
444+
gpio_func_sel(phy_802_3->reset_gpio_num, PIN_FUNC_GPIO);
445445
gpio_set_level(phy_802_3->reset_gpio_num, 0);
446+
gpio_output_enable(phy_802_3->reset_gpio_num);
446447
if (reset_assert_us < 10000) {
447448
esp_rom_delay_us(reset_assert_us);
448449
} else {

components/esp_eth/src/spi/dm9051/esp_eth_mac_dm9051.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
#include <inttypes.h>
1111
#include "esp_eth_mac_spi.h"
1212
#include "driver/gpio.h"
13+
#include "esp_private/gpio.h"
14+
#include "soc/io_mux_reg.h"
1315
#include "driver/spi_master.h"
1416
#include "esp_attr.h"
1517
#include "esp_log.h"
@@ -23,7 +25,6 @@
2325
#include "freertos/semphr.h"
2426
#include "dm9051.h"
2527
#include "sdkconfig.h"
26-
#include "esp_rom_gpio.h"
2728
#include "esp_rom_sys.h"
2829
#include "esp_cpu.h"
2930
#include "esp_timer.h"
@@ -784,9 +785,9 @@ static esp_err_t emac_dm9051_init(esp_eth_mac_t *mac)
784785
emac_dm9051_t *emac = __containerof(mac, emac_dm9051_t, parent);
785786
esp_eth_mediator_t *eth = emac->eth;
786787
if (emac->int_gpio_num >= 0) {
787-
esp_rom_gpio_pad_select_gpio(emac->int_gpio_num);
788-
gpio_set_direction(emac->int_gpio_num, GPIO_MODE_INPUT);
789-
gpio_set_pull_mode(emac->int_gpio_num, GPIO_PULLDOWN_ONLY);
788+
gpio_func_sel(emac->int_gpio_num, PIN_FUNC_GPIO);
789+
gpio_input_enable(emac->int_gpio_num);
790+
gpio_pulldown_en(emac->int_gpio_num);
790791
gpio_set_intr_type(emac->int_gpio_num, GPIO_INTR_POSEDGE);
791792
gpio_intr_enable(emac->int_gpio_num);
792793
gpio_isr_handler_add(emac->int_gpio_num, dm9051_isr_handler, emac);
@@ -806,7 +807,6 @@ static esp_err_t emac_dm9051_init(esp_eth_mac_t *mac)
806807
err:
807808
if (emac->int_gpio_num >= 0) {
808809
gpio_isr_handler_remove(emac->int_gpio_num);
809-
gpio_reset_pin(emac->int_gpio_num);
810810
}
811811
eth->on_state_changed(eth, ETH_STATE_DEINIT, NULL);
812812
return ret;
@@ -819,7 +819,6 @@ static esp_err_t emac_dm9051_deinit(esp_eth_mac_t *mac)
819819
mac->stop(mac);
820820
if (emac->int_gpio_num >= 0) {
821821
gpio_isr_handler_remove(emac->int_gpio_num);
822-
gpio_reset_pin(emac->int_gpio_num);
823822
}
824823
if (emac->poll_timer && esp_timer_is_active(emac->poll_timer)) {
825824
esp_timer_stop(emac->poll_timer);

components/esp_eth/src/spi/ksz8851snl/esp_eth_mac_ksz8851snl.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
#include "esp_check.h"
1414
#include "esp_cpu.h"
1515
#include "driver/gpio.h"
16-
#include "esp_rom_gpio.h"
16+
#include "esp_private/gpio.h"
17+
#include "soc/io_mux_reg.h"
1718
#include "driver/spi_master.h"
1819
#include "freertos/FreeRTOS.h"
1920
#include "freertos/task.h"
@@ -328,9 +329,9 @@ static esp_err_t emac_ksz8851_init(esp_eth_mac_t *mac)
328329
emac_ksz8851snl_t *emac = __containerof(mac, emac_ksz8851snl_t, parent);
329330
esp_eth_mediator_t *eth = emac->eth;
330331
if (emac->int_gpio_num >= 0) {
331-
esp_rom_gpio_pad_select_gpio(emac->int_gpio_num);
332-
gpio_set_direction(emac->int_gpio_num, GPIO_MODE_INPUT);
333-
gpio_set_pull_mode(emac->int_gpio_num, GPIO_PULLUP_ONLY);
332+
gpio_func_sel(emac->int_gpio_num, PIN_FUNC_GPIO);
333+
gpio_input_enable(emac->int_gpio_num);
334+
gpio_pullup_en(emac->int_gpio_num);
334335
gpio_set_intr_type(emac->int_gpio_num, GPIO_INTR_NEGEDGE); // NOTE(v.chistyakov): active low
335336
gpio_intr_enable(emac->int_gpio_num);
336337
gpio_isr_handler_add(emac->int_gpio_num, ksz8851_isr_handler, emac);
@@ -352,7 +353,6 @@ static esp_err_t emac_ksz8851_init(esp_eth_mac_t *mac)
352353
ESP_LOGD(TAG, "MAC initialization failed");
353354
if (emac->int_gpio_num >= 0) {
354355
gpio_isr_handler_remove(emac->int_gpio_num);
355-
gpio_reset_pin(emac->int_gpio_num);
356356
}
357357
eth->on_state_changed(eth, ETH_STATE_DEINIT, NULL);
358358
return ret;
@@ -365,7 +365,6 @@ static esp_err_t emac_ksz8851_deinit(esp_eth_mac_t *mac)
365365
mac->stop(mac);
366366
if (emac->int_gpio_num >= 0) {
367367
gpio_isr_handler_remove(emac->int_gpio_num);
368-
gpio_reset_pin(emac->int_gpio_num);
369368
}
370369
if (emac->poll_timer && esp_timer_is_active(emac->poll_timer)) {
371370
esp_timer_stop(emac->poll_timer);

0 commit comments

Comments
 (0)