* [PATCH] net: phy: smsc: force all capable mode if the phy is started in powerdown mode
@ 2012-12-01 20:44 Philippe Reynes
2012-12-03 18:34 ` David Miller
0 siblings, 1 reply; 2+ messages in thread
From: Philippe Reynes @ 2012-12-01 20:44 UTC (permalink / raw)
To: netdev, linux-kernel, davem
Cc: otavio, javier, jkosina, eric.jarrige, julien.boibessot,
thomas.petazzoni, Philippe Reynes
A SMSC PHY in power down mode can't be used.
If a SMSC PHY is in this mode in the config_init
stage, the mode "all capable" is set. So the PHY
could then be used.
Signed-off-by: Philippe Reynes <tremyfr@yahoo.fr>
---
drivers/net/phy/smsc.c | 27 ++++++++++++++++++++++++++-
include/linux/smscphy.h | 5 +++++
2 files changed, 31 insertions(+), 1 deletions(-)
diff --git a/drivers/net/phy/smsc.c b/drivers/net/phy/smsc.c
index 88e3991..63018d0 100644
--- a/drivers/net/phy/smsc.c
+++ b/drivers/net/phy/smsc.c
@@ -43,7 +43,32 @@ static int smsc_phy_ack_interrupt(struct phy_device *phydev)
static int smsc_phy_config_init(struct phy_device *phydev)
{
- int rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS);
+ /*
+ * If the SMSC PHY is in power down mode, then set it
+ * in all capable mode before using it.
+ */
+ int rc = phy_read(phydev, MII_LAN83C185_SPECIAL_MODES);
+ if (rc < 0)
+ return rc;
+
+ if ((rc & MII_LAN83C185_MODE_MASK) == MII_LAN83C185_MODE_POWERDOWN) {
+ int timeout = 50000;
+
+ /* set "all capable" mode and reset the phy */
+ rc |= MII_LAN83C185_MODE_ALL;
+ phy_write(phydev, MII_LAN83C185_SPECIAL_MODES, rc);
+ phy_write(phydev, MII_BMCR, BMCR_RESET);
+
+ /* wait end of reset (max 500 ms) */
+ do {
+ udelay(10);
+ if (timeout-- == 0)
+ return -1;
+ rc = phy_read(phydev, MII_BMCR);
+ } while (rc & BMCR_RESET);
+ }
+
+ rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS);
if (rc < 0)
return rc;
diff --git a/include/linux/smscphy.h b/include/linux/smscphy.h
index ce718cb..f4bf16e 100644
--- a/include/linux/smscphy.h
+++ b/include/linux/smscphy.h
@@ -4,6 +4,7 @@
#define MII_LAN83C185_ISF 29 /* Interrupt Source Flags */
#define MII_LAN83C185_IM 30 /* Interrupt Mask */
#define MII_LAN83C185_CTRL_STATUS 17 /* Mode/Status Register */
+#define MII_LAN83C185_SPECIAL_MODES 18 /* Special Modes Register */
#define MII_LAN83C185_ISF_INT1 (1<<1) /* Auto-Negotiation Page Received */
#define MII_LAN83C185_ISF_INT2 (1<<2) /* Parallel Detection Fault */
@@ -22,4 +23,8 @@
#define MII_LAN83C185_EDPWRDOWN (1 << 13) /* EDPWRDOWN */
#define MII_LAN83C185_ENERGYON (1 << 1) /* ENERGYON */
+#define MII_LAN83C185_MODE_MASK 0xE0
+#define MII_LAN83C185_MODE_POWERDOWN 0xC0 /* Power Down mode */
+#define MII_LAN83C185_MODE_ALL 0xE0 /* All capable mode */
+
#endif /* __LINUX_SMSCPHY_H__ */
--
1.7.4.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] net: phy: smsc: force all capable mode if the phy is started in powerdown mode
2012-12-01 20:44 [PATCH] net: phy: smsc: force all capable mode if the phy is started in powerdown mode Philippe Reynes
@ 2012-12-03 18:34 ` David Miller
0 siblings, 0 replies; 2+ messages in thread
From: David Miller @ 2012-12-03 18:34 UTC (permalink / raw)
To: tremyfr
Cc: netdev, linux-kernel, otavio, javier, jkosina, eric.jarrige,
julien.boibessot, thomas.petazzoni
From: Philippe Reynes <tremyfr@yahoo.fr>
Date: Sat, 1 Dec 2012 21:44:49 +0100
> static int smsc_phy_config_init(struct phy_device *phydev)
> {
> - int rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS);
> + /*
> + * If the SMSC PHY is in power down mode, then set it
> + * in all capable mode before using it.
> + */
> + int rc = phy_read(phydev, MII_LAN83C185_SPECIAL_MODES);
This is formatted poorly. Do not put comments above the basic
block variable declarations, it looks terrible.
Also, comments in the networking code should be formatted:
/* Like
* this.
*/
/*
* Not like
* this.
*/
Thanks.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-12-03 18:34 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-12-01 20:44 [PATCH] net: phy: smsc: force all capable mode if the phy is started in powerdown mode Philippe Reynes
2012-12-03 18:34 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).