u32 phy_mask, ver;
        int ret;
 
-       ret = pm_runtime_get_sync(data->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(data->dev);
+       ret = pm_runtime_resume_and_get(data->dev);
+       if (ret < 0)
                return ret;
-       }
 
        /* wait for scan logic to settle */
        msleep(PHY_MAX_ADDR * data->access_time);
        if (phy_reg & ~PHY_REG_MASK || phy_id & ~PHY_ID_MASK)
                return -EINVAL;
 
-       ret = pm_runtime_get_sync(data->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(data->dev);
+       ret = pm_runtime_resume_and_get(data->dev);
+       if (ret < 0)
                return ret;
-       }
 
        reg = (USERACCESS_GO | USERACCESS_READ | (phy_reg << 21) |
               (phy_id << 16));
        if (phy_reg & ~PHY_REG_MASK || phy_id & ~PHY_ID_MASK)
                return -EINVAL;
 
-       ret = pm_runtime_get_sync(data->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(data->dev);
+       ret = pm_runtime_resume_and_get(data->dev);
+       if (ret < 0)
                return ret;
-       }
 
        reg = (USERACCESS_GO | USERACCESS_WRITE | (phy_reg << 21) |
                   (phy_id << 16) | (phy_data & USERACCESS_DATA));