summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXie Xiaobo <X.Xie@freescale.com>2013-04-18 09:29:49 (GMT)
committerFleming Andrew-AFLEMING <AFLEMING@freescale.com>2013-04-18 22:57:08 (GMT)
commit3cfb107b8044047dc119c2121052ebbe565b6146 (patch)
treede3dc03ee4f3f62427ca4c9918aceddb8c808bfa
parent1f456fc53f2014473d150eaf6259bb3af4f24e5b (diff)
downloadlinux-fsl-qoriq-3cfb107b8044047dc119c2121052ebbe565b6146.tar.xz
net/phy: Add support for dp8384x phy
Support National Semiconductor PHYs DP83848/83849. Signed-off-by: Xie Xiaobo <X.Xie@freescale.com> Change-Id: I0c1128512e3d80eb53af0e307ca42b3698668a40 Reviewed-on: http://git.am.freescale.net:8181/1154 Reviewed-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com> Tested-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com>
-rw-r--r--drivers/net/phy/Kconfig5
-rw-r--r--drivers/net/phy/Makefile1
-rw-r--r--drivers/net/phy/dp8384x.c93
3 files changed, 99 insertions, 0 deletions
diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
index 961f0b2..e910c74 100644
--- a/drivers/net/phy/Kconfig
+++ b/drivers/net/phy/Kconfig
@@ -92,6 +92,11 @@ config NATIONAL_PHY
---help---
Currently supports the DP83865 PHY.
+config DP8384x_PHY
+ tristate "Drivers for National Semiconductor dp83848 dp83849 PHYs"
+ ---help---
+ Currently supports the DP83848/DP83849 PHY.
+
config STE10XP
tristate "Driver for STMicroelectronics STe10Xp PHYs"
---help---
diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile
index 9645e38..3c647cc 100644
--- a/drivers/net/phy/Makefile
+++ b/drivers/net/phy/Makefile
@@ -20,6 +20,7 @@ obj-$(CONFIG_FIXED_PHY) += fixed.o
obj-$(CONFIG_MDIO_BITBANG) += mdio-bitbang.o
obj-$(CONFIG_MDIO_GPIO) += mdio-gpio.o
obj-$(CONFIG_NATIONAL_PHY) += national.o
+obj-$(CONFIG_DP8384x_PHY) += dp8384x.o
obj-$(CONFIG_DP83640_PHY) += dp83640.o
obj-$(CONFIG_STE10XP) += ste10Xp.o
obj-$(CONFIG_MICREL_PHY) += micrel.o
diff --git a/drivers/net/phy/dp8384x.c b/drivers/net/phy/dp8384x.c
new file mode 100644
index 0000000..5fec1e5a
--- /dev/null
+++ b/drivers/net/phy/dp8384x.c
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2009-2012 Freescale Semiconductor, Inc.
+ *
+ * Driver for National Semiconductor PHYs 8384x
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/mii.h>
+#include <linux/ethtool.h>
+#include <linux/phy.h>
+#include <linux/netdevice.h>
+
+/* DP8384x phy identifier values */
+#define DP83848_PHY_ID 0x20005c90
+#define DP83849_PHY_ID 0x20005ca0
+/* PHY Status Register */
+#define MII_DP8384X_PHYSTST 16
+
+static int ns8384x_config_init(struct phy_device *phydev)
+{
+ int ret = phy_read(phydev, MII_DP8384X_PHYSTST);
+ if (ret < 0) {
+ printk(KERN_INFO "%s MII_DP83640_ISR %x\n",
+ __func__, ret);
+ }
+
+ return 0;
+}
+
+static struct phy_driver dp83848_driver = {
+ .phy_id = DP83848_PHY_ID,
+ .phy_id_mask = 0xfffffff0,
+ .name = "NatSemi DP83848",
+ .features = PHY_BASIC_FEATURES,
+ .flags = PHY_HAS_INTERRUPT,
+ .config_init = ns8384x_config_init,
+ .config_aneg = genphy_config_aneg,
+ .read_status = genphy_read_status,
+ .driver = {.owner = THIS_MODULE,}
+};
+
+static struct phy_driver dp83849_driver = {
+ .phy_id = DP83849_PHY_ID,
+ .phy_id_mask = 0xfffffff0,
+ .name = "NatSemi DP83849",
+ .features = PHY_BASIC_FEATURES,
+ .flags = PHY_HAS_INTERRUPT,
+ .config_init = ns8384x_config_init,
+ .config_aneg = genphy_config_aneg,
+ .read_status = genphy_read_status,
+ .driver = {.owner = THIS_MODULE,}
+};
+
+static int __init ns8384x_init(void)
+{
+ int ret;
+
+ ret = phy_driver_register(&dp83848_driver);
+ if (ret)
+ goto err1;
+
+ ret = phy_driver_register(&dp83849_driver);
+ if (ret)
+ goto err2;
+
+ return 0;
+err2:
+ printk(KERN_INFO "register dp83849 PHY driver fail\n");
+ phy_driver_unregister(&dp83848_driver);
+err1:
+ printk(KERN_INFO "register dp83848 PHY driver fail\n");
+ return ret;
+}
+
+static void __exit ns8384x_exit(void)
+{
+ phy_driver_unregister(&dp83848_driver);
+ phy_driver_unregister(&dp83849_driver);
+}
+
+MODULE_DESCRIPTION("NatSemi PHY driver");
+MODULE_AUTHOR("Chenghu Wu <b16972@freescale.com>");
+MODULE_LICENSE("GPL v2");
+
+module_init(ns8384x_init);
+module_exit(ns8384x_exit);