+static int lan8814_read_page_reg(struct phy_device *phydev,
+ int page, u32 addr)
+{
+ u32 data;
+
+ phy_write(phydev, KSZ_EXT_PAGE_ACCESS_CONTROL, page);
+ phy_write(phydev, KSZ_EXT_PAGE_ACCESS_ADDRESS_DATA, addr);
+ phy_write(phydev, KSZ_EXT_PAGE_ACCESS_CONTROL, (page | 0x4000));
+ data = phy_read(phydev, KSZ_EXT_PAGE_ACCESS_ADDRESS_DATA);
+
+ return data;
+}
+
+static int lan8814_write_page_reg(struct phy_device *phydev,
+ int page, u16 addr, u16 val)
+{
+ phy_write(phydev, KSZ_EXT_PAGE_ACCESS_CONTROL, page);
+ phy_write(phydev, KSZ_EXT_PAGE_ACCESS_ADDRESS_DATA, addr);
+ phy_write(phydev, KSZ_EXT_PAGE_ACCESS_CONTROL, (page | 0x4000));
+ val = phy_write(phydev, KSZ_EXT_PAGE_ACCESS_ADDRESS_DATA, val);
+ if (val != 0) {
+ phydev_err(phydev, "Error: phy_write_mmd has returned error %d\n",
+ val);
+ return val;
+ }
+ return 0;
+}
I think you can just use phy_read_mmd() and phy_write_mmd().
Andrew