Patchwork [19/27] UBUNTU: SAUCE: phy: Add support for VSC8234

login
register
mail settings
Submitter Benjamin Collins
Date Oct. 16, 2011, 6:49 a.m.
Message ID <d0658f18b929d721e55f774535db801f208c480b.1339455422.git.bcollins@ubuntu.com>
Download mbox | patch
Permalink /patch/164281/
State New
Headers show

Comments

Benjamin Collins - Oct. 16, 2011, 6:49 a.m.
This patch is being maintained and will eventually be merged upstream by
Freescale directly. The powerpc-e500mc flavour uses this.

Signed-off-by: Andy Fleming <afleming@freescale.com>
Signed-off-by: Kumar Gala <kumar.gala@freescale.com>
Signed-off-by: Ben Collins <bcollins@ubuntu.com>
---
 drivers/net/phy/vitesse.c |   25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

Patch

diff --git a/drivers/net/phy/vitesse.c b/drivers/net/phy/vitesse.c
index 0ec8e09..d0f36a1 100644
--- a/drivers/net/phy/vitesse.c
+++ b/drivers/net/phy/vitesse.c
@@ -54,6 +54,7 @@ 
 #define MII_VSC8221_AUXCONSTAT_INIT	0x0004 /* need to set this bit? */
 #define MII_VSC8221_AUXCONSTAT_RESERVED	0x0004
 
+#define PHY_ID_VSC8234			0x000fc620
 #define PHY_ID_VSC8244			0x000fc6c0
 #define PHY_ID_VSC8221			0x000fc550
 
@@ -119,7 +120,8 @@  static int vsc82xx_config_intr(struct phy_device *phydev)
 
 	if (phydev->interrupts == PHY_INTERRUPT_ENABLED)
 		err = phy_write(phydev, MII_VSC8244_IMASK,
-			phydev->drv->phy_id == PHY_ID_VSC8244 ?
+			((phydev->drv->phy_id == PHY_ID_VSC8234) ||
+			 (phydev->drv->phy_id == PHY_ID_VSC8244)) ?
 				MII_VSC8244_IMASK_MASK :
 				MII_VSC8221_IMASK_MASK);
 	else {
@@ -153,6 +155,21 @@  static struct phy_driver vsc8244_driver = {
 	.driver 	= { .owner = THIS_MODULE,},
 };
 
+/* Vitesse 823x */
+static struct phy_driver vsc8234_driver = {
+	.phy_id		= PHY_ID_VSC8234,
+	.name		= "Vitesse VSC8234",
+	.phy_id_mask	= 0x000ffff0,
+	.features	= PHY_GBIT_FEATURES,
+	.flags		= PHY_HAS_INTERRUPT,
+	.config_init	= &vsc824x_config_init,
+	.config_aneg	= &genphy_config_aneg,
+	.read_status	= &genphy_read_status,
+	.ack_interrupt	= &vsc824x_ack_interrupt,
+	.config_intr	= &vsc82xx_config_intr,
+	.driver 	= { .owner = THIS_MODULE,},
+};
+
 static int vsc8221_config_init(struct phy_device *phydev)
 {
 	int err;
@@ -190,6 +207,12 @@  static int __init vsc82xx_init(void)
 	err = phy_driver_register(&vsc8221_driver);
 	if (err < 0)
 		phy_driver_unregister(&vsc8244_driver);
+	err = phy_driver_register(&vsc8234_driver);
+	if (err < 0) {
+	 	phy_driver_unregister(&vsc8244_driver);
+	 	phy_driver_unregister(&vsc8221_driver);
+	}
+
 	return err;
 }