mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2025-04-21 12:27:27 +03:00
mvswitch,adm6996: use phy fixups instead of a nonstandard patch for hardware detection
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@14977 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
@@ -105,6 +105,24 @@ static int adm6996_config_aneg(struct phy_device *phydev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int adm6996_fixup(struct phy_device *dev)
|
||||
{
|
||||
struct mii_bus *bus = dev->bus;
|
||||
u16 reg;
|
||||
|
||||
/* look for the switch on the bus */
|
||||
reg = bus->read(bus, PHYADDR(ADM_SIG0)) & ADM_SIG0_MASK;
|
||||
if (reg != ADM_SIG0_VAL)
|
||||
return 0;
|
||||
|
||||
reg = bus->read(bus, PHYADDR(ADM_SIG1)) & ADM_SIG1_MASK;
|
||||
if (reg != ADM_SIG1_VAL)
|
||||
return 0;
|
||||
|
||||
dev->phy_id = (ADM_SIG0_VAL << 16) | ADM_SIG1_VAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int adm6996_probe(struct phy_device *pdev)
|
||||
{
|
||||
struct adm6996_priv *priv;
|
||||
@@ -124,30 +142,12 @@ static void adm6996_remove(struct phy_device *pdev)
|
||||
kfree(pdev->priv);
|
||||
}
|
||||
|
||||
static bool adm6996_detect(struct mii_bus *bus, int addr)
|
||||
{
|
||||
u16 reg;
|
||||
|
||||
/* we only attach to phy id 0 */
|
||||
if (addr != 0)
|
||||
return false;
|
||||
|
||||
/* look for the switch on the bus */
|
||||
reg = bus->read(bus, PHYADDR(ADM_SIG0)) & ADM_SIG0_MASK;
|
||||
if (reg != ADM_SIG0_VAL)
|
||||
return false;
|
||||
|
||||
reg = bus->read(bus, PHYADDR(ADM_SIG1)) & ADM_SIG1_MASK;
|
||||
if (reg != ADM_SIG1_VAL)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static struct phy_driver adm6996_driver = {
|
||||
.name = "Infineon ADM6996",
|
||||
.phy_id = (ADM_SIG0_VAL << 16) | ADM_SIG1_VAL,
|
||||
.phy_id_mask = 0xffffffff,
|
||||
.features = PHY_BASIC_FEATURES,
|
||||
.detect = adm6996_detect,
|
||||
.probe = adm6996_probe,
|
||||
.remove = adm6996_remove,
|
||||
.config_init = &adm6996_config_init,
|
||||
@@ -158,6 +158,7 @@ static struct phy_driver adm6996_driver = {
|
||||
|
||||
static int __init adm6996_init(void)
|
||||
{
|
||||
phy_register_fixup_for_id(PHY_ANY_ID, adm6996_fixup);
|
||||
return phy_driver_register(&adm6996_driver);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user