diff options
author | Xie Xiaobo <X.Xie@freescale.com> | 2013-04-18 09:29:49 (GMT) |
---|---|---|
committer | Fleming Andrew-AFLEMING <AFLEMING@freescale.com> | 2013-04-18 22:57:08 (GMT) |
commit | 3cfb107b8044047dc119c2121052ebbe565b6146 (patch) | |
tree | de3dc03ee4f3f62427ca4c9918aceddb8c808bfa | |
parent | 1f456fc53f2014473d150eaf6259bb3af4f24e5b (diff) | |
download | linux-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/Kconfig | 5 | ||||
-rw-r--r-- | drivers/net/phy/Makefile | 1 | ||||
-rw-r--r-- | drivers/net/phy/dp8384x.c | 93 |
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); |