diff --git a/src/drivers/net/phy/m88e1512/chip.h b/src/drivers/net/phy/m88e1512/chip.h index 36a46e93c9..9a3523d7ee 100644 --- a/src/drivers/net/phy/m88e1512/chip.h +++ b/src/drivers/net/phy/m88e1512/chip.h @@ -7,4 +7,5 @@ struct drivers_net_phy_m88e1512_config { unsigned char led_0_ctrl; /* LED[0] Control */ unsigned char led_1_ctrl; /* LED[1] Control */ unsigned char led_2_ctrl; /* LED[2] Control */ + bool enable_int; /* INTn can be routed to LED[2] pin */ }; diff --git a/src/drivers/net/phy/m88e1512/m88e1512.c b/src/drivers/net/phy/m88e1512/m88e1512.c index d0883bf9d6..a8d1c730a1 100644 --- a/src/drivers/net/phy/m88e1512/m88e1512.c +++ b/src/drivers/net/phy/m88e1512/m88e1512.c @@ -34,6 +34,22 @@ static void m88e1512_init(struct device *dev) /* Switch back to page 0. */ switch_page(dev, 0); } + + /* INTn can be routed to LED[2] pin. */ + if (config->enable_int) { + printk(BIOS_DEBUG, "%s: INTn is routed to LED[2] pin %s.\n", + dev_path(dev->bus->dev), dev->chip_ops->name); + + /* Select page 3 to access LED function control register. */ + switch_page(dev, 3); + + reg = mdio_read(dev, LED_TIMER_CTRL_REG); + setbits16(®, LED_IRQ_ENABLE); + mdio_write(dev, LED_TIMER_CTRL_REG, reg); + + /* Switch back to page 0. */ + switch_page(dev, 0); + } } struct device_operations m88e1512_ops = { diff --git a/src/drivers/net/phy/m88e1512/m88e1512.h b/src/drivers/net/phy/m88e1512/m88e1512.h index 36e3279689..ca0f756693 100644 --- a/src/drivers/net/phy/m88e1512/m88e1512.h +++ b/src/drivers/net/phy/m88e1512/m88e1512.h @@ -7,5 +7,7 @@ #define PAGE_REG 0x16 #define LED_FUNC_CTRL_REG 0x10 #define LED_FUNC_CTRL_MASK 0x0FFF +#define LED_TIMER_CTRL_REG 0x12 +#define LED_IRQ_ENABLE (1 << 7) #endif /* _PHY_M88E1512_H_ */