net: phy: micrel: make sure the factory test bit is cleared
The KSZ8081 PHY has a factory test mode which is set at the de-assertion of the reset line based on the RXER (KSZ8081RNA/RND) or TXC (KSZ8081MNX/RNB) pin. If a pull-down is missing, or if the pin has a pull-up, the factory test mode should be cleared by manually writing a 0 (according to the datasheet). Create another ksz8081_config function to handle this case. Suggested-by: Antoine Tenart <antoine.tenart@bootlin.com> Signed-off-by: Nicolas Ferre <nicolas.ferre@microchip.com> Acked-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
		
							parent
							
								
									19820db0bd
								
							
						
					
					
						commit
						b2f2643b39
					
				| 
						 | 
					@ -24,6 +24,7 @@ static struct phy_driver KSZ804_driver = {
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MII_KSZPHY_OMSO		0x16
 | 
					#define MII_KSZPHY_OMSO		0x16
 | 
				
			||||||
 | 
					#define KSZPHY_OMSO_FACTORY_TEST BIT(15)
 | 
				
			||||||
#define KSZPHY_OMSO_B_CAST_OFF	(1 << 9)
 | 
					#define KSZPHY_OMSO_B_CAST_OFF	(1 << 9)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int ksz_genconfig_bcastoff(struct phy_device *phydev)
 | 
					static int ksz_genconfig_bcastoff(struct phy_device *phydev)
 | 
				
			||||||
| 
						 | 
					@ -80,12 +81,30 @@ static struct phy_driver KSZ8051_driver = {
 | 
				
			||||||
	.shutdown = &genphy_shutdown,
 | 
						.shutdown = &genphy_shutdown,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int ksz8081_config(struct phy_device *phydev)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ret = phy_read(phydev, MDIO_DEVAD_NONE, MII_KSZPHY_OMSO);
 | 
				
			||||||
 | 
						if (ret < 0)
 | 
				
			||||||
 | 
							return ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ret &= ~KSZPHY_OMSO_FACTORY_TEST;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ret = phy_write(phydev, MDIO_DEVAD_NONE, MII_KSZPHY_OMSO,
 | 
				
			||||||
 | 
								ret | KSZPHY_OMSO_B_CAST_OFF);
 | 
				
			||||||
 | 
						if (ret < 0)
 | 
				
			||||||
 | 
							return ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return genphy_config(phydev);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct phy_driver KSZ8081_driver = {
 | 
					static struct phy_driver KSZ8081_driver = {
 | 
				
			||||||
	.name = "Micrel KSZ8081",
 | 
						.name = "Micrel KSZ8081",
 | 
				
			||||||
	.uid = 0x221560,
 | 
						.uid = 0x221560,
 | 
				
			||||||
	.mask = 0xfffff0,
 | 
						.mask = 0xfffff0,
 | 
				
			||||||
	.features = PHY_BASIC_FEATURES,
 | 
						.features = PHY_BASIC_FEATURES,
 | 
				
			||||||
	.config = &ksz_genconfig_bcastoff,
 | 
						.config = &ksz8081_config,
 | 
				
			||||||
	.startup = &genphy_startup,
 | 
						.startup = &genphy_startup,
 | 
				
			||||||
	.shutdown = &genphy_shutdown,
 | 
						.shutdown = &genphy_shutdown,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue