@@ -41,37 +41,14 @@ MODULE_DESCRIPTION("Realtek PHY driver");
41
41
MODULE_AUTHOR ("Johnson Leung" );
42
42
MODULE_LICENSE ("GPL" );
43
43
44
- static int rtl8211x_page_read (struct phy_device * phydev , u16 page , u16 address )
44
+ static int rtl821x_read_page (struct phy_device * phydev )
45
45
{
46
- int ret ;
47
-
48
- ret = phy_write (phydev , RTL821x_PAGE_SELECT , page );
49
- if (ret )
50
- return ret ;
51
-
52
- ret = phy_read (phydev , address );
53
-
54
- /* restore to default page 0 */
55
- phy_write (phydev , RTL821x_PAGE_SELECT , 0x0 );
56
-
57
- return ret ;
46
+ return __phy_read (phydev , RTL821x_PAGE_SELECT );
58
47
}
59
48
60
- static int rtl8211x_page_write (struct phy_device * phydev , u16 page ,
61
- u16 address , u16 val )
49
+ static int rtl821x_write_page (struct phy_device * phydev , int page )
62
50
{
63
- int ret ;
64
-
65
- ret = phy_write (phydev , RTL821x_PAGE_SELECT , page );
66
- if (ret )
67
- return ret ;
68
-
69
- ret = phy_write (phydev , address , val );
70
-
71
- /* restore to default page 0 */
72
- phy_write (phydev , RTL821x_PAGE_SELECT , 0x0 );
73
-
74
- return ret ;
51
+ return __phy_write (phydev , RTL821x_PAGE_SELECT , page );
75
52
}
76
53
77
54
static int rtl8201_ack_interrupt (struct phy_device * phydev )
@@ -96,7 +73,7 @@ static int rtl8211f_ack_interrupt(struct phy_device *phydev)
96
73
{
97
74
int err ;
98
75
99
- err = rtl8211x_page_read (phydev , 0xa43 , RTL8211F_INSR );
76
+ err = phy_read_paged (phydev , 0xa43 , RTL8211F_INSR );
100
77
101
78
return (err < 0 ) ? err : 0 ;
102
79
}
@@ -110,7 +87,7 @@ static int rtl8201_config_intr(struct phy_device *phydev)
110
87
else
111
88
val = 0 ;
112
89
113
- return rtl8211x_page_write (phydev , 0x7 , RTL8201F_IER , val );
90
+ return phy_write_paged (phydev , 0x7 , RTL8201F_IER , val );
114
91
}
115
92
116
93
static int rtl8211b_config_intr (struct phy_device * phydev )
@@ -148,36 +125,24 @@ static int rtl8211f_config_intr(struct phy_device *phydev)
148
125
else
149
126
val = 0 ;
150
127
151
- return rtl8211x_page_write (phydev , 0xa42 , RTL821x_INER , val );
128
+ return phy_write_paged (phydev , 0xa42 , RTL821x_INER , val );
152
129
}
153
130
154
131
static int rtl8211f_config_init (struct phy_device * phydev )
155
132
{
156
133
int ret ;
157
- u16 val ;
134
+ u16 val = 0 ;
158
135
159
136
ret = genphy_config_init (phydev );
160
137
if (ret < 0 )
161
138
return ret ;
162
139
163
- ret = rtl8211x_page_read (phydev , 0xd08 , 0x11 );
164
- if (ret < 0 )
165
- return ret ;
166
-
167
- val = ret & 0xffff ;
168
-
169
140
/* enable TX-delay for rgmii-id and rgmii-txid, otherwise disable it */
170
141
if (phydev -> interface == PHY_INTERFACE_MODE_RGMII_ID ||
171
142
phydev -> interface == PHY_INTERFACE_MODE_RGMII_TXID )
172
- val |= RTL8211F_TX_DELAY ;
173
- else
174
- val &= ~RTL8211F_TX_DELAY ;
175
-
176
- ret = rtl8211x_page_write (phydev , 0xd08 , 0x11 , val );
177
- if (ret )
178
- return ret ;
143
+ val = RTL8211F_TX_DELAY ;
179
144
180
- return 0 ;
145
+ return phy_modify_paged ( phydev , 0xd08 , 0x11 , RTL8211F_TX_DELAY , val ) ;
181
146
}
182
147
183
148
static struct phy_driver realtek_drvs [] = {
@@ -197,6 +162,8 @@ static struct phy_driver realtek_drvs[] = {
197
162
.config_intr = & rtl8201_config_intr ,
198
163
.suspend = genphy_suspend ,
199
164
.resume = genphy_resume ,
165
+ .read_page = rtl821x_read_page ,
166
+ .write_page = rtl821x_write_page ,
200
167
}, {
201
168
.phy_id = 0x001cc912 ,
202
169
.name = "RTL8211B Gigabit Ethernet" ,
@@ -236,6 +203,8 @@ static struct phy_driver realtek_drvs[] = {
236
203
.config_intr = & rtl8211f_config_intr ,
237
204
.suspend = genphy_suspend ,
238
205
.resume = genphy_resume ,
206
+ .read_page = rtl821x_read_page ,
207
+ .write_page = rtl821x_write_page ,
239
208
},
240
209
};
241
210
0 commit comments