forked from Minki/linux
net: phy: micrel: add coma mode GPIO
The LAN8814 has a coma mode pin which puts the PHY into isolate and power-dowm mode. Unfortunately, the mode cannot be disabled by a register. Usually, the input pin has a pull-up and connected to a GPIO which can then be used to disable the mode. Try to get the GPIO and deassert it. Signed-off-by: Michael Walle <michael@walle.cc> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
31d00ca4ce
commit
738871b092
@ -32,6 +32,7 @@
|
||||
#include <linux/ptp_clock.h>
|
||||
#include <linux/ptp_classify.h>
|
||||
#include <linux/net_tstamp.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
|
||||
/* Operation Mode Strap Override */
|
||||
#define MII_KSZPHY_OMSO 0x16
|
||||
@ -2837,6 +2838,21 @@ static int lan8814_config_init(struct phy_device *phydev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lan8814_release_coma_mode(struct phy_device *phydev)
|
||||
{
|
||||
struct gpio_desc *gpiod;
|
||||
|
||||
gpiod = devm_gpiod_get_optional(&phydev->mdio.dev, "coma-mode",
|
||||
GPIOD_OUT_HIGH_OPEN_DRAIN);
|
||||
if (IS_ERR(gpiod))
|
||||
return PTR_ERR(gpiod);
|
||||
|
||||
gpiod_set_consumer_name(gpiod, "LAN8814 coma mode");
|
||||
gpiod_set_value_cansleep(gpiod, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lan8814_probe(struct phy_device *phydev)
|
||||
{
|
||||
struct kszphy_priv *priv;
|
||||
@ -2859,6 +2875,10 @@ static int lan8814_probe(struct phy_device *phydev)
|
||||
addr, sizeof(struct lan8814_shared_priv));
|
||||
|
||||
if (phy_package_init_once(phydev)) {
|
||||
err = lan8814_release_coma_mode(phydev);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = lan8814_ptp_probe_once(phydev);
|
||||
if (err)
|
||||
return err;
|
||||
|
Loading…
Reference in New Issue
Block a user