lkml.org 
[lkml]   [2010]   [Nov]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/2] phylib: Add support for Marvell 88E1149R devices.
    Date
    The 88E1149R is 10/100/1000 quad-gigabit Ethernet PHY.  The
    .config_aneg function can be shared with 88E1118, but it needs its own
    .config_init.

    Signed-off-by: David Daney <ddaney@caviumnetworks.com>
    ---
    drivers/net/phy/marvell.c | 44 +++++++++++++++++++++++++++++++++++++++++++
    include/linux/marvell_phy.h | 1 +
    2 files changed, 45 insertions(+), 0 deletions(-)

    diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
    index 33ad654..a0851c7 100644
    --- a/drivers/net/phy/marvell.c
    +++ b/drivers/net/phy/marvell.c
    @@ -519,6 +519,36 @@ static int m88e1118_config_init(struct phy_device *phydev)
    return 0;
    }

    +static int m88e1149_config_init(struct phy_device *phydev)
    +{
    + int err;
    +
    + /* Change address */
    + err = phy_write(phydev, 0x16, 0x0002);
    + if (err < 0)
    + return err;
    +
    + /* Enable 1000 Mbit */
    + err = phy_write(phydev, 0x15, 0x1048);
    + if (err < 0)
    + return err;
    +
    + err = marvell_of_reg_init(phydev);
    + if (err < 0)
    + return err;
    +
    + /* Reset address */
    + err = phy_write(phydev, 0x16, 0x0);
    + if (err < 0)
    + return err;
    +
    + err = phy_write(phydev, MII_BMCR, BMCR_RESET);
    + if (err < 0)
    + return err;
    +
    + return 0;
    +}
    +
    static int m88e1145_config_init(struct phy_device *phydev)
    {
    int err;
    @@ -776,6 +806,19 @@ static struct phy_driver marvell_drivers[] = {
    .driver = { .owner = THIS_MODULE },
    },
    {
    + .phy_id = MARVELL_PHY_ID_88E1149R,
    + .phy_id_mask = MARVELL_PHY_ID_MASK,
    + .name = "Marvell 88E1149R",
    + .features = PHY_GBIT_FEATURES,
    + .flags = PHY_HAS_INTERRUPT,
    + .config_init = &m88e1149_config_init,
    + .config_aneg = &m88e1118_config_aneg,
    + .read_status = &genphy_read_status,
    + .ack_interrupt = &marvell_ack_interrupt,
    + .config_intr = &marvell_config_intr,
    + .driver = { .owner = THIS_MODULE },
    + },
    + {
    .phy_id = MARVELL_PHY_ID_88E1240,
    .phy_id_mask = MARVELL_PHY_ID_MASK,
    .name = "Marvell 88E1240",
    @@ -826,6 +869,7 @@ static struct mdio_device_id __maybe_unused marvell_tbl[] = {
    { 0x01410e10, 0xfffffff0 },
    { 0x01410cb0, 0xfffffff0 },
    { 0x01410cd0, 0xfffffff0 },
    + { 0x01410e50, 0xfffffff0 },
    { 0x01410e30, 0xfffffff0 },
    { 0x01410e90, 0xfffffff0 },
    { }
    diff --git a/include/linux/marvell_phy.h b/include/linux/marvell_phy.h
    index 1ff81b5..dd3c34e 100644
    --- a/include/linux/marvell_phy.h
    +++ b/include/linux/marvell_phy.h
    @@ -11,6 +11,7 @@
    #define MARVELL_PHY_ID_88E1118 0x01410e10
    #define MARVELL_PHY_ID_88E1121R 0x01410cb0
    #define MARVELL_PHY_ID_88E1145 0x01410cd0
    +#define MARVELL_PHY_ID_88E1149R 0x01410e50
    #define MARVELL_PHY_ID_88E1240 0x01410e30
    #define MARVELL_PHY_ID_88E1318S 0x01410e90

    --
    1.7.2.3


    \
     
     \ /
      Last update: 2010-11-18 00:57    [W:0.048 / U:0.312 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site