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
1 changed files with 20 additions and 0 deletions
|
@ -32,6 +32,7 @@
|
||||||
#include <linux/ptp_clock.h>
|
#include <linux/ptp_clock.h>
|
||||||
#include <linux/ptp_classify.h>
|
#include <linux/ptp_classify.h>
|
||||||
#include <linux/net_tstamp.h>
|
#include <linux/net_tstamp.h>
|
||||||
|
#include <linux/gpio/consumer.h>
|
||||||
|
|
||||||
/* Operation Mode Strap Override */
|
/* Operation Mode Strap Override */
|
||||||
#define MII_KSZPHY_OMSO 0x16
|
#define MII_KSZPHY_OMSO 0x16
|
||||||
|
@ -2837,6 +2838,21 @@ static int lan8814_config_init(struct phy_device *phydev)
|
||||||
return 0;
|
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)
|
static int lan8814_probe(struct phy_device *phydev)
|
||||||
{
|
{
|
||||||
struct kszphy_priv *priv;
|
struct kszphy_priv *priv;
|
||||||
|
@ -2859,6 +2875,10 @@ static int lan8814_probe(struct phy_device *phydev)
|
||||||
addr, sizeof(struct lan8814_shared_priv));
|
addr, sizeof(struct lan8814_shared_priv));
|
||||||
|
|
||||||
if (phy_package_init_once(phydev)) {
|
if (phy_package_init_once(phydev)) {
|
||||||
|
err = lan8814_release_coma_mode(phydev);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
err = lan8814_ptp_probe_once(phydev);
|
err = lan8814_ptp_probe_once(phydev);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
Loading…
Add table
Reference in a new issue