|
|
@@ -241,12 +241,22 @@ static esp_err_t dp83848_pwrctl(esp_eth_phy_t *phy, bool enable)
|
|
|
}
|
|
|
PHY_CHECK(eth->phy_reg_write(eth, dp83848->addr, ETH_PHY_BMCR_REG_ADDR, bmcr.val) == ESP_OK,
|
|
|
"write BMCR failed", err);
|
|
|
- PHY_CHECK(eth->phy_reg_read(eth, dp83848->addr, ETH_PHY_BMCR_REG_ADDR, &(bmcr.val)) == ESP_OK,
|
|
|
- "read BMCR failed", err);
|
|
|
if (!enable) {
|
|
|
+ PHY_CHECK(eth->phy_reg_read(eth, dp83848->addr, ETH_PHY_BMCR_REG_ADDR, &(bmcr.val)) == ESP_OK,
|
|
|
+ "read BMCR failed", err);
|
|
|
PHY_CHECK(bmcr.power_down == 1, "power down failed", err);
|
|
|
} else {
|
|
|
- PHY_CHECK(bmcr.power_down == 0, "power up failed", err);
|
|
|
+ /* wait for power up complete */
|
|
|
+ uint32_t to = 0;
|
|
|
+ for (to = 0; to < dp83848->reset_timeout_ms / 10; to++) {
|
|
|
+ vTaskDelay(pdMS_TO_TICKS(10));
|
|
|
+ PHY_CHECK(eth->phy_reg_read(eth, dp83848->addr, ETH_PHY_BMCR_REG_ADDR, &(bmcr.val)) == ESP_OK,
|
|
|
+ "read BMCR failed", err);
|
|
|
+ if (bmcr.power_down == 0) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ PHY_CHECK(to < dp83848->reset_timeout_ms / 10, "power up timeout", err);
|
|
|
}
|
|
|
return ESP_OK;
|
|
|
err:
|