summaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorAhmad Fatoum <a.fatoum@pengutronix.de>2024-05-02 17:17:55 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2024-05-03 08:50:35 +0200
commit372d21e79e308df7ca41fc03439872edebfab16a (patch)
tree13eadac2a6cda9d1def6aad4c4db8b09b7b4ff1a /drivers/net
parent8ca910b9218822e7122ac9bcb62d0c50acb971ff (diff)
downloadbarebox-372d21e79e308df7ca41fc03439872edebfab16a.tar.gz
barebox-372d21e79e308df7ca41fc03439872edebfab16a.tar.xz
net: dsa: ksz9477: always toggle reset gpio if available
The barebox driver currently only ensures that the switch is out of reset, but doesn't actually trigger a reset pulse. The Linux driver, on the other hand, holds reset active for 10ms and then waits a whopping 100ms after reset deassertion. This seems excessive by a thousandfold for at least KSZ9893R[1], whose datasheet states: After the de-assertion of reset, it is recommended to wait a minimum of 100µs before starting to program the device through any interface. Therefore, let's pulse the reset like Linux does and give the switch 100 microseconds before continuing with the driver probe. [1]: DS00002420E-page 176 Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> Link: https://lore.barebox.org/20240502151757.3964461-1-a.fatoum@pengutronix.de Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/ksz9477.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/ksz9477.c b/drivers/net/ksz9477.c
index 1abea9d040..5c5f4ec8d9 100644
--- a/drivers/net/ksz9477.c
+++ b/drivers/net/ksz9477.c
@@ -433,8 +433,10 @@ static int microchip_switch_probe(struct device *dev)
if (IS_ERR(gpio)) {
dev_warn(dev, "Failed to get 'reset' GPIO (ignored)\n");
} else if (gpio) {
- mdelay(1);
+ gpiod_set_value(gpio, true);
+ mdelay(10);
gpiod_set_value(gpio, false);
+ udelay(100);
}
ksz_reset_switch(dev->priv);