Commit 42a7cb50a96e95cdca26607727c6767876414ced
Committed by
Joe Hershberger
1 parent
d256be29f8
Exists in
master
and in
53 other branches
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, |
include/micrel.h
... | ... | @@ -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 |