mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
mdio_bus: Issue GPIO RESET to PHYs.
Some boards [1] leave the PHYs at an invalid state during system power-up or reset thus causing unreliability issues with the PHY which manifests as PHY not being detected or link not functional. To fix this, these PHYs need to be RESET via a GPIO connected to the PHY's RESET pin. Some boards have a single GPIO controlling the PHY RESET pin of all PHYs on the bus whereas some others have separate GPIOs controlling individual PHY RESETs. In both cases, the RESET de-assertion cannot be done in the PHY driver as the PHY will not probe till its reset is de-asserted. So do the RESET de-assertion in the MDIO bus driver. [1] - am572x-idk, am571x-idk, a437x-idk Signed-off-by: Roger Quadros <[email protected]> Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
parent
15769ff8b6
commit
69226896ad
4 changed files with 94 additions and 0 deletions
|
|
@ -22,6 +22,8 @@
|
|||
#include <linux/of_net.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#define DEFAULT_GPIO_RESET_DELAY 10 /* in microseconds */
|
||||
|
||||
MODULE_AUTHOR("Grant Likely <[email protected]>");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
|
|
@ -221,6 +223,11 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
|
|||
|
||||
mdio->dev.of_node = np;
|
||||
|
||||
/* Get bus level PHY reset GPIO details */
|
||||
mdio->reset_delay_us = DEFAULT_GPIO_RESET_DELAY;
|
||||
of_property_read_u32(np, "reset-delay-us", &mdio->reset_delay_us);
|
||||
mdio->num_reset_gpios = of_gpio_named_count(np, "reset-gpios");
|
||||
|
||||
/* Register the MDIO bus */
|
||||
rc = mdiobus_register(mdio);
|
||||
if (rc)
|
||||
|
|
|
|||
Loading…
Reference in a new issue