Commit 77a99394 authored by Zhao Qiang's avatar Zhao Qiang Committed by David S. Miller

phy/at8031: enable at8031 to work on interrupt mode

The at8031 can work on polling mode and interrupt mode.
Add ack_interrupt and config intr funcs to enable
interrupt mode for it.
Signed-off-by: default avatarZhao Qiang <B45475@freescale.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 437de07c
...@@ -27,6 +27,9 @@ ...@@ -27,6 +27,9 @@
#define AT803X_MMD_ACCESS_CONTROL 0x0D #define AT803X_MMD_ACCESS_CONTROL 0x0D
#define AT803X_MMD_ACCESS_CONTROL_DATA 0x0E #define AT803X_MMD_ACCESS_CONTROL_DATA 0x0E
#define AT803X_FUNC_DATA 0x4003 #define AT803X_FUNC_DATA 0x4003
#define AT803X_INER 0x0012
#define AT803X_INER_INIT 0xec00
#define AT803X_INSR 0x0013
#define AT803X_DEBUG_ADDR 0x1D #define AT803X_DEBUG_ADDR 0x1D
#define AT803X_DEBUG_DATA 0x1E #define AT803X_DEBUG_DATA 0x1E
#define AT803X_DEBUG_SYSTEM_MODE_CTRL 0x05 #define AT803X_DEBUG_SYSTEM_MODE_CTRL 0x05
...@@ -191,6 +194,31 @@ static int at803x_config_init(struct phy_device *phydev) ...@@ -191,6 +194,31 @@ static int at803x_config_init(struct phy_device *phydev)
return 0; return 0;
} }
static int at803x_ack_interrupt(struct phy_device *phydev)
{
int err;
err = phy_read(phydev, AT803X_INSR);
return (err < 0) ? err : 0;
}
static int at803x_config_intr(struct phy_device *phydev)
{
int err;
int value;
value = phy_read(phydev, AT803X_INER);
if (phydev->interrupts == PHY_INTERRUPT_ENABLED)
err = phy_write(phydev, AT803X_INER,
value | AT803X_INER_INIT);
else
err = phy_write(phydev, AT803X_INER, 0);
return err;
}
static struct phy_driver at803x_driver[] = { static struct phy_driver at803x_driver[] = {
{ {
/* ATHEROS 8035 */ /* ATHEROS 8035 */
...@@ -240,6 +268,8 @@ static struct phy_driver at803x_driver[] = { ...@@ -240,6 +268,8 @@ static struct phy_driver at803x_driver[] = {
.flags = PHY_HAS_INTERRUPT, .flags = PHY_HAS_INTERRUPT,
.config_aneg = genphy_config_aneg, .config_aneg = genphy_config_aneg,
.read_status = genphy_read_status, .read_status = genphy_read_status,
.ack_interrupt = &at803x_ack_interrupt,
.config_intr = &at803x_config_intr,
.driver = { .driver = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
}, },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment