29
29
#define RTL8211F_INSR 0x1d
30
30
#define RTL8211F_TX_DELAY 0x100
31
31
32
+ #define RTL8201F_ISR 0x1e
33
+ #define RTL8201F_IER 0x13
34
+
32
35
MODULE_DESCRIPTION ("Realtek PHY driver" );
33
36
MODULE_AUTHOR ("Johnson Leung" );
34
37
MODULE_LICENSE ("GPL" );
35
38
39
+ static int rtl8201_ack_interrupt (struct phy_device * phydev )
40
+ {
41
+ int err ;
42
+
43
+ err = phy_read (phydev , RTL8201F_ISR );
44
+
45
+ return (err < 0 ) ? err : 0 ;
46
+ }
47
+
36
48
static int rtl821x_ack_interrupt (struct phy_device * phydev )
37
49
{
38
50
int err ;
@@ -54,6 +66,25 @@ static int rtl8211f_ack_interrupt(struct phy_device *phydev)
54
66
return (err < 0 ) ? err : 0 ;
55
67
}
56
68
69
+ static int rtl8201_config_intr (struct phy_device * phydev )
70
+ {
71
+ int err ;
72
+
73
+ /* switch to page 7 */
74
+ phy_write (phydev , RTL821x_PAGE_SELECT , 0x7 );
75
+
76
+ if (phydev -> interrupts == PHY_INTERRUPT_ENABLED )
77
+ err = phy_write (phydev , RTL8201F_IER ,
78
+ BIT (13 ) | BIT (12 ) | BIT (11 ));
79
+ else
80
+ err = phy_write (phydev , RTL8201F_IER , 0 );
81
+
82
+ /* restore to default page 0 */
83
+ phy_write (phydev , RTL821x_PAGE_SELECT , 0x0 );
84
+
85
+ return err ;
86
+ }
87
+
57
88
static int rtl8211b_config_intr (struct phy_device * phydev )
58
89
{
59
90
int err ;
@@ -128,6 +159,18 @@ static struct phy_driver realtek_drvs[] = {
128
159
.flags = PHY_HAS_INTERRUPT ,
129
160
.config_aneg = & genphy_config_aneg ,
130
161
.read_status = & genphy_read_status ,
162
+ }, {
163
+ .phy_id = 0x001cc816 ,
164
+ .name = "RTL8201F 10/100Mbps Ethernet" ,
165
+ .phy_id_mask = 0x001fffff ,
166
+ .features = PHY_BASIC_FEATURES ,
167
+ .flags = PHY_HAS_INTERRUPT ,
168
+ .config_aneg = & genphy_config_aneg ,
169
+ .read_status = & genphy_read_status ,
170
+ .ack_interrupt = & rtl8201_ack_interrupt ,
171
+ .config_intr = & rtl8201_config_intr ,
172
+ .suspend = genphy_suspend ,
173
+ .resume = genphy_resume ,
131
174
}, {
132
175
.phy_id = 0x001cc912 ,
133
176
.name = "RTL8211B Gigabit Ethernet" ,
@@ -181,6 +224,7 @@ static struct phy_driver realtek_drvs[] = {
181
224
module_phy_driver (realtek_drvs );
182
225
183
226
static struct mdio_device_id __maybe_unused realtek_tbl [] = {
227
+ { 0x001cc816 , 0x001fffff },
184
228
{ 0x001cc912 , 0x001fffff },
185
229
{ 0x001cc914 , 0x001fffff },
186
230
{ 0x001cc915 , 0x001fffff },
0 commit comments