Commit 42a7cb50a96e95cdca26607727c6767876414ced

Authored by SARTRE Leo
Committed by Joe Hershberger
1 parent d256be29f8

net: phy: supplement support for Micrel's KSZ9031

Add function ksz9031_phy_extended_write and ksz9031_phy_extended_read

Signed-off-by: Leo Sartre <lsartre@adeneo-embedded.com>

Showing 2 changed files with 46 additions and 1 deletions Side-by-side Diff

drivers/net/phy/micrel.c
... ... @@ -148,9 +148,43 @@
148 148 };
149 149 #endif
150 150  
151   -/*
  151 +/**
152 152 * KSZ9031
153 153 */
  154 +/* PHY Registers */
  155 +#define MII_KSZ9031_MMD_ACCES_CTRL 0x0d
  156 +#define MII_KSZ9031_MMD_REG_DATA 0x0e
  157 +
  158 +/* Accessors to extended registers*/
  159 +int ksz9031_phy_extended_write(struct phy_device *phydev,
  160 + int devaddr, int regnum, u16 mode, u16 val)
  161 +{
  162 + /*select register addr for mmd*/
  163 + phy_write(phydev, MDIO_DEVAD_NONE,
  164 + MII_KSZ9031_MMD_ACCES_CTRL, devaddr);
  165 + /*select register for mmd*/
  166 + phy_write(phydev, MDIO_DEVAD_NONE,
  167 + MII_KSZ9031_MMD_REG_DATA, regnum);
  168 + /*setup mode*/
  169 + phy_write(phydev, MDIO_DEVAD_NONE,
  170 + MII_KSZ9031_MMD_ACCES_CTRL, (mode | devaddr));
  171 + /*write the value*/
  172 + return phy_write(phydev, MDIO_DEVAD_NONE,
  173 + MII_KSZ9031_MMD_REG_DATA, val);
  174 +}
  175 +
  176 +int ksz9031_phy_extended_read(struct phy_device *phydev, int devaddr,
  177 + int regnum, u16 mode)
  178 +{
  179 + phy_write(phydev, MDIO_DEVAD_NONE,
  180 + MII_KSZ9031_MMD_ACCES_CTRL, devaddr);
  181 + phy_write(phydev, MDIO_DEVAD_NONE,
  182 + MII_KSZ9031_MMD_REG_DATA, regnum);
  183 + phy_write(phydev, MDIO_DEVAD_NONE,
  184 + MII_KSZ9031_MMD_ACCES_CTRL, (devaddr | mode));
  185 + return phy_read(phydev, MDIO_DEVAD_NONE, MII_KSZ9031_MMD_REG_DATA);
  186 +}
  187 +
154 188 static struct phy_driver ksz9031_driver = {
155 189 .name = "Micrel ksz9031",
156 190 .uid = 0x221620,
... ... @@ -8,10 +8,21 @@
8 8 #define MII_KSZ9021_EXT_RGMII_RX_DATA_SKEW 0x105
9 9 #define MII_KSZ9021_EXT_RGMII_TX_DATA_SKEW 0x106
10 10 #define MII_KSZ9021_EXT_ANALOG_TEST 0x107
  11 +/* Register operations */
  12 +#define MII_KSZ9031_MOD_REG 0x0000
  13 +/* Data operations */
  14 +#define MII_KSZ9031_MOD_DATA_NO_POST_INC 0x4000
  15 +#define MII_KSZ9031_MOD_DATA_POST_INC_RW 0x8000
  16 +#define MII_KSZ9031_MOD_DATA_POST_INC_W 0xC000
11 17  
12 18 struct phy_device;
13 19 int ksz9021_phy_extended_write(struct phy_device *phydev, int regnum, u16 val);
14 20 int ksz9021_phy_extended_read(struct phy_device *phydev, int regnum);
  21 +
  22 +int ksz9031_phy_extended_write(struct phy_device *phydev, int devaddr,
  23 + int regnum, u16 mode, u16 val);
  24 +int ksz9031_phy_extended_read(struct phy_device *phydev, int devaddr,
  25 + int regnum, u16 mode);
15 26  
16 27 #endif