> > > > Hi Raghuram > > > > You might want to look at phy_read_paged(), phy_write_paged(), etc. > > > > There can be race conditions with paged access. > > Yep, so something like: > > static void lan88xx_TR_reg_set(struct phy_device *phydev, u16 regaddr, > u32 data) > { > int save_page, val; > u16 buf; > > save_page = phy_save_page(phydev); > phy_write_paged(phydev, LAN88XX_EXT_PAGE_ACCESS_TR, > LAN88XX_EXT_PAGE_TR_LOW_DATA, (data & > 0xFFFF)); > phy_write_paged(phydev, LAN88XX_EXT_PAGE_ACCESS_TR, > LAN88XX_EXT_PAGE_TR_HIGH_DATA, > (data & 0x00FF0000) >> 16); > > /* Config control bits [15:13] of register */ > buf = (regaddr & ~(0x3 << 13));/* Clr [14:13] to write data in reg */ > buf |= 0x8000; /* Set [15] to Packet transmit */ > > phy_write_paged(phydev, LAN88XX_EXT_PAGE_ACCESS_TR, > LAN88XX_EXT_PAGE_TR_CR, buf); > usleep_range(1000, 2000);/* Wait for Data to be written */ > > val = phy_read_paged(phydev, LAN88XX_EXT_PAGE_ACCESS_TR, > LAN88XX_EXT_PAGE_TR_CR); > if (!(val & 0x8000)) > pr_warn("TR Register[0x%X] configuration failed\n", > regaddr); > > phy_restore_page(phydev, save_page, 0); } > > Since PHY accesses and thus things like phy_save_page() can fail, the return > type of this function should be changed to 'int' and some error checking > should be added.
Thanks David/Andrew. Will take care of it. Thanks, Raghu