int ulpi_write(struct ulpi_viewport *ulpi_vp, u8 *reg, u32 value)
 {
-       u32 val = ULPI_RWRUN | ULPI_RWCTRL | ((u32)reg << 16) | (value & 0xff);
+       u32 addr = (uintptr_t)reg & 0xFF;
+       u32 val = ULPI_RWRUN | ULPI_RWCTRL | addr << 16 | (value & 0xff);
 
        val |= (ulpi_vp->port_num & 0x7) << 24;
        return ulpi_request(ulpi_vp, val);
 u32 ulpi_read(struct ulpi_viewport *ulpi_vp, u8 *reg)
 {
        int err;
-       u32 val = ULPI_RWRUN | ((u32)reg << 16);
+       u32 val = ULPI_RWRUN | ((uintptr_t)reg & 0xFF) << 16;
 
        val |= (ulpi_vp->port_num & 0x7) << 24;
        err = ulpi_request(ulpi_vp, val);
 
 /*
  * Write to the ULPI PHY register via the viewport.
  * @reg                - the ULPI register (one of the fields in struct ulpi_regs).
+ *               Due to ULPI design, only 8 lsb of address are used.
  * @value      - the value - only 8 lower bits are used, others ignored.
  *
  * returns 0 on success, ULPI_ERROR on failure.
 /*
  * Read the ULPI PHY register content via the viewport.
  * @reg                - the ULPI register (one of the fields in struct ulpi_regs).
+ *               Due to ULPI design, only 8 lsb of address are used.
  *
  * returns register content on success, ULPI_ERROR on failure.
  */