Exemplo n.º 1
0
Arquivo: sfp.c Projeto: mkrufky/linux
static void sfp_sm_probe_phy(struct sfp *sfp)
{
	struct phy_device *phy;
	int err;

	msleep(T_PHY_RESET_MS);

	phy = mdiobus_scan(sfp->i2c_mii, SFP_PHY_ADDR);
	if (IS_ERR(phy)) {
		dev_err(sfp->dev, "mdiobus scan returned %ld\n", PTR_ERR(phy));
		return;
	}
	if (!phy) {
		dev_info(sfp->dev, "no PHY detected\n");
		return;
	}

	err = sfp_add_phy(sfp->sfp_bus, phy);
	if (err) {
		phy_device_remove(phy);
		phy_device_free(phy);
		dev_err(sfp->dev, "sfp_add_phy failed: %d\n", err);
		return;
	}

	sfp->mod_phy = phy;
	phy_start(phy);
}
Exemplo n.º 2
0
static int pfc200_phy_fixup(struct mii_bus *mii, int phyadr)
{
	struct phy_device *phydev;
	int ret;

	phydev = mdiobus_scan(mii, phyadr);

	if (IS_ERR(phydev)) {
		pr_err("Cannot find phydev %d on mii bus\n", phyadr);
		return PTR_ERR(phydev);
	}

	ret = phy_write(phydev, MII_BMCR, BMCR_ANENABLE | BMCR_HP_MDIX);
	if (ret)
		pr_err("Failed to write to phy: %s\n", strerror(-ret));

	return ret;
}
Exemplo n.º 3
0
int mdiobus_detect(struct device_d *dev)
{
	struct mii_bus *mii = to_mii_bus(dev);
	int i, ret;

	for (i = 0; i < PHY_MAX_ADDR; i++) {
		struct phy_device *phydev;

		phydev = mdiobus_scan(mii, i);
		if (IS_ERR(phydev))
			continue;
		if (phydev->registered)
			continue;
		ret = phy_register_device(phydev);
		if (ret)
			dev_err(dev, "failed to register phy: %s\n", strerror(-ret));
		dev_info(dev, "registered phy as /dev/%s\n", phydev->cdev.name);
	}

	return 0;
}