Skip to content

Commit cf127ff

Browse files
jbrun3tdavem330
authored andcommitted
net: phy: meson-gxl: add interrupt support
Enable interrupt support in meson-gxl PHY driver Signed-off-by: Jerome Brunet <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 30e43f1 commit cf127ff

File tree

1 file changed

+36
-1
lines changed

1 file changed

+36
-1
lines changed

drivers/net/phy/meson-gxl.c

+36-1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,14 @@
3333
#define TSTCNTL_WRITE_ADDRESS GENMASK(4, 0)
3434
#define TSTREAD1 21
3535
#define TSTWRITE 23
36+
#define INTSRC_FLAG 29
37+
#define INTSRC_ANEG_PR BIT(1)
38+
#define INTSRC_PARALLEL_FAULT BIT(2)
39+
#define INTSRC_ANEG_LP_ACK BIT(3)
40+
#define INTSRC_LINK_DOWN BIT(4)
41+
#define INTSRC_REMOTE_FAULT BIT(5)
42+
#define INTSRC_ANEG_COMPLETE BIT(6)
43+
#define INTSRC_MASK 30
3644

3745
#define BANK_ANALOG_DSP 0
3846
#define BANK_WOL 1
@@ -193,16 +201,43 @@ static int meson_gxl_read_status(struct phy_device *phydev)
193201
return genphy_read_status(phydev);
194202
}
195203

204+
static int meson_gxl_ack_interrupt(struct phy_device *phydev)
205+
{
206+
int ret = phy_read(phydev, INTSRC_FLAG);
207+
208+
return ret < 0 ? ret : 0;
209+
}
210+
211+
static int meson_gxl_config_intr(struct phy_device *phydev)
212+
{
213+
u16 val;
214+
215+
if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
216+
val = INTSRC_ANEG_PR
217+
| INTSRC_PARALLEL_FAULT
218+
| INTSRC_ANEG_LP_ACK
219+
| INTSRC_LINK_DOWN
220+
| INTSRC_REMOTE_FAULT
221+
| INTSRC_ANEG_COMPLETE;
222+
} else {
223+
val = 0;
224+
}
225+
226+
return phy_write(phydev, INTSRC_MASK, val);
227+
}
228+
196229
static struct phy_driver meson_gxl_phy[] = {
197230
{
198231
.phy_id = 0x01814400,
199232
.phy_id_mask = 0xfffffff0,
200233
.name = "Meson GXL Internal PHY",
201234
.features = PHY_BASIC_FEATURES,
202-
.flags = PHY_IS_INTERNAL,
235+
.flags = PHY_IS_INTERNAL | PHY_HAS_INTERRUPT,
203236
.config_init = meson_gxl_config_init,
204237
.aneg_done = genphy_aneg_done,
205238
.read_status = meson_gxl_read_status,
239+
.ack_interrupt = meson_gxl_ack_interrupt,
240+
.config_intr = meson_gxl_config_intr,
206241
.suspend = genphy_suspend,
207242
.resume = genphy_resume,
208243
},

0 commit comments

Comments
 (0)