提交 4d9b1a02 编写于 作者: S Steve Glendinning 提交者: Jeff Garzik

Add support for SMSC LAN8187 and LAN8700 PHYs

Add support for two additional SMSC PHY models with identical interrupt
source and mask registers to the LAN83C185
Signed-off-by: NSteve Glendinning <steve.glendinning@smsc.com>
Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
上级 48c41b99
...@@ -48,7 +48,7 @@ config VITESSE_PHY ...@@ -48,7 +48,7 @@ config VITESSE_PHY
config SMSC_PHY config SMSC_PHY
tristate "Drivers for SMSC PHYs" tristate "Drivers for SMSC PHYs"
---help--- ---help---
Currently supports the LAN83C185 PHY Currently supports the LAN83C185, LAN8187 and LAN8700 PHYs
config BROADCOM_PHY config BROADCOM_PHY
tristate "Drivers for Broadcom PHYs" tristate "Drivers for Broadcom PHYs"
......
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
* Free Software Foundation; either version 2 of the License, or (at your * Free Software Foundation; either version 2 of the License, or (at your
* option) any later version. * option) any later version.
* *
* Support added for SMSC LAN8187 and LAN8700 by steve.glendinning@smsc.com
*
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -82,13 +84,78 @@ static struct phy_driver lan83c185_driver = { ...@@ -82,13 +84,78 @@ static struct phy_driver lan83c185_driver = {
.driver = { .owner = THIS_MODULE, } .driver = { .owner = THIS_MODULE, }
}; };
static struct phy_driver lan8187_driver = {
.phy_id = 0x0007c0b0, /* OUI=0x00800f, Model#=0x0b */
.phy_id_mask = 0xfffffff0,
.name = "SMSC LAN8187",
.features = (PHY_BASIC_FEATURES | SUPPORTED_Pause
| SUPPORTED_Asym_Pause),
.flags = PHY_HAS_INTERRUPT | PHY_HAS_MAGICANEG,
/* basic functions */
.config_aneg = genphy_config_aneg,
.read_status = genphy_read_status,
.config_init = smsc_phy_config_init,
/* IRQ related */
.ack_interrupt = smsc_phy_ack_interrupt,
.config_intr = smsc_phy_config_intr,
.driver = { .owner = THIS_MODULE, }
};
static struct phy_driver lan8700_driver = {
.phy_id = 0x0007c0c0, /* OUI=0x00800f, Model#=0x0c */
.phy_id_mask = 0xfffffff0,
.name = "SMSC LAN8700",
.features = (PHY_BASIC_FEATURES | SUPPORTED_Pause
| SUPPORTED_Asym_Pause),
.flags = PHY_HAS_INTERRUPT | PHY_HAS_MAGICANEG,
/* basic functions */
.config_aneg = genphy_config_aneg,
.read_status = genphy_read_status,
.config_init = smsc_phy_config_init,
/* IRQ related */
.ack_interrupt = smsc_phy_ack_interrupt,
.config_intr = smsc_phy_config_intr,
.driver = { .owner = THIS_MODULE, }
};
static int __init smsc_init(void) static int __init smsc_init(void)
{ {
return phy_driver_register (&lan83c185_driver); int ret;
ret = phy_driver_register (&lan83c185_driver);
if (ret)
goto err1;
ret = phy_driver_register (&lan8187_driver);
if (ret)
goto err2;
ret = phy_driver_register (&lan8700_driver);
if (ret)
goto err3;
return 0;
err3:
phy_driver_unregister (&lan8187_driver);
err2:
phy_driver_unregister (&lan83c185_driver);
err1:
return ret;
} }
static void __exit smsc_exit(void) static void __exit smsc_exit(void)
{ {
phy_driver_unregister (&lan8700_driver);
phy_driver_unregister (&lan8187_driver);
phy_driver_unregister (&lan83c185_driver); phy_driver_unregister (&lan83c185_driver);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册