diff options
author | Steve Glendinning <steve.glendinning@smsc.com> | 2008-04-28 13:37:29 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2008-04-29 01:55:59 -0400 |
commit | 4d9b1a022a33c57ca8f31a1364cef682c8c817d6 (patch) | |
tree | 9275fe79066ce892128de2ee8a409d01a5002ea0 /drivers/net/phy | |
parent | 48c41b9941233a85ccdb88c579bd4e9b0ee609cf (diff) |
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: Steve Glendinning <steve.glendinning@smsc.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/net/phy')
-rw-r--r-- | drivers/net/phy/Kconfig | 2 | ||||
-rw-r--r-- | drivers/net/phy/smsc.c | 69 |
2 files changed, 69 insertions, 2 deletions
diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig index 3ac8529bb92c..6bf9e76b0a00 100644 --- a/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig | |||
@@ -48,7 +48,7 @@ config VITESSE_PHY | |||
48 | config SMSC_PHY | 48 | config SMSC_PHY |
49 | tristate "Drivers for SMSC PHYs" | 49 | tristate "Drivers for SMSC PHYs" |
50 | ---help--- | 50 | ---help--- |
51 | Currently supports the LAN83C185 PHY | 51 | Currently supports the LAN83C185, LAN8187 and LAN8700 PHYs |
52 | 52 | ||
53 | config BROADCOM_PHY | 53 | config BROADCOM_PHY |
54 | tristate "Drivers for Broadcom PHYs" | 54 | tristate "Drivers for Broadcom PHYs" |
diff --git a/drivers/net/phy/smsc.c b/drivers/net/phy/smsc.c index 6a901f00ed14..73baa7a3bb0e 100644 --- a/drivers/net/phy/smsc.c +++ b/drivers/net/phy/smsc.c | |||
@@ -12,6 +12,8 @@ | |||
12 | * Free Software Foundation; either version 2 of the License, or (at your | 12 | * Free Software Foundation; either version 2 of the License, or (at your |
13 | * option) any later version. | 13 | * option) any later version. |
14 | * | 14 | * |
15 | * Support added for SMSC LAN8187 and LAN8700 by steve.glendinning@smsc.com | ||
16 | * | ||
15 | */ | 17 | */ |
16 | 18 | ||
17 | #include <linux/kernel.h> | 19 | #include <linux/kernel.h> |
@@ -82,13 +84,78 @@ static struct phy_driver lan83c185_driver = { | |||
82 | .driver = { .owner = THIS_MODULE, } | 84 | .driver = { .owner = THIS_MODULE, } |
83 | }; | 85 | }; |
84 | 86 | ||
87 | static struct phy_driver lan8187_driver = { | ||
88 | .phy_id = 0x0007c0b0, /* OUI=0x00800f, Model#=0x0b */ | ||
89 | .phy_id_mask = 0xfffffff0, | ||
90 | .name = "SMSC LAN8187", | ||
91 | |||
92 | .features = (PHY_BASIC_FEATURES | SUPPORTED_Pause | ||
93 | | SUPPORTED_Asym_Pause), | ||
94 | .flags = PHY_HAS_INTERRUPT | PHY_HAS_MAGICANEG, | ||
95 | |||
96 | /* basic functions */ | ||
97 | .config_aneg = genphy_config_aneg, | ||
98 | .read_status = genphy_read_status, | ||
99 | .config_init = smsc_phy_config_init, | ||
100 | |||
101 | /* IRQ related */ | ||
102 | .ack_interrupt = smsc_phy_ack_interrupt, | ||
103 | .config_intr = smsc_phy_config_intr, | ||
104 | |||
105 | .driver = { .owner = THIS_MODULE, } | ||
106 | }; | ||
107 | |||
108 | static struct phy_driver lan8700_driver = { | ||
109 | .phy_id = 0x0007c0c0, /* OUI=0x00800f, Model#=0x0c */ | ||
110 | .phy_id_mask = 0xfffffff0, | ||
111 | .name = "SMSC LAN8700", | ||
112 | |||
113 | .features = (PHY_BASIC_FEATURES | SUPPORTED_Pause | ||
114 | | SUPPORTED_Asym_Pause), | ||
115 | .flags = PHY_HAS_INTERRUPT | PHY_HAS_MAGICANEG, | ||
116 | |||
117 | /* basic functions */ | ||
118 | .config_aneg = genphy_config_aneg, | ||
119 | .read_status = genphy_read_status, | ||
120 | .config_init = smsc_phy_config_init, | ||
121 | |||
122 | /* IRQ related */ | ||
123 | .ack_interrupt = smsc_phy_ack_interrupt, | ||
124 | .config_intr = smsc_phy_config_intr, | ||
125 | |||
126 | .driver = { .owner = THIS_MODULE, } | ||
127 | }; | ||
128 | |||
85 | static int __init smsc_init(void) | 129 | static int __init smsc_init(void) |
86 | { | 130 | { |
87 | return phy_driver_register (&lan83c185_driver); | 131 | int ret; |
132 | |||
133 | ret = phy_driver_register (&lan83c185_driver); | ||
134 | if (ret) | ||
135 | goto err1; | ||
136 | |||
137 | ret = phy_driver_register (&lan8187_driver); | ||
138 | if (ret) | ||
139 | goto err2; | ||
140 | |||
141 | ret = phy_driver_register (&lan8700_driver); | ||
142 | if (ret) | ||
143 | goto err3; | ||
144 | |||
145 | return 0; | ||
146 | |||
147 | err3: | ||
148 | phy_driver_unregister (&lan8187_driver); | ||
149 | err2: | ||
150 | phy_driver_unregister (&lan83c185_driver); | ||
151 | err1: | ||
152 | return ret; | ||
88 | } | 153 | } |
89 | 154 | ||
90 | static void __exit smsc_exit(void) | 155 | static void __exit smsc_exit(void) |
91 | { | 156 | { |
157 | phy_driver_unregister (&lan8700_driver); | ||
158 | phy_driver_unregister (&lan8187_driver); | ||
92 | phy_driver_unregister (&lan83c185_driver); | 159 | phy_driver_unregister (&lan83c185_driver); |
93 | } | 160 | } |
94 | 161 | ||