if (ret)
                        return ret;
  
-               return s5m_reg_update(s5m8767->iodev, reg, selector, mask);
 -              sec_reg_read(s5m8767->iodev, reg, &val);
 -              val = (val & ~mask) | sel;
 -
 -              ret = sec_reg_write(s5m8767->iodev, reg, val);
++              return sec_reg_update(s5m8767->iodev, reg, selector, mask);
        }
 -
 -      *selector = sel;
 -      return ret;
  }
  
  static int s5m8767_set_voltage_time_sel(struct regulator_dev *rdev,
                }
        }
  
 -      if (pdata->buck2_gpiodvs || pdata->buck3_gpiodvs ||
 -              pdata->buck4_gpiodvs) {
 -              if (gpio_is_valid(pdata->buck_gpios[0]) &&
 -                      gpio_is_valid(pdata->buck_gpios[1]) &&
 -                      gpio_is_valid(pdata->buck_gpios[2])) {
 -                      ret = gpio_request(pdata->buck_gpios[0],
 -                                              "S5M8767 SET1");
 -                      if (ret == -EBUSY)
 -                              dev_warn(&pdev->dev, "Duplicated gpio request for SET1\n");
 -
 -                      ret = gpio_request(pdata->buck_gpios[1],
 -                                         "S5M8767 SET2");
 -                      if (ret == -EBUSY)
 -                              dev_warn(&pdev->dev, "Duplicated gpio request for SET2\n");
 -
 -                      ret = gpio_request(pdata->buck_gpios[2],
 -                                         "S5M8767 SET3");
 -                      if (ret == -EBUSY)
 -                              dev_warn(&pdev->dev, "Duplicated gpio request for SET3\n");
 -                      /* SET1 GPIO */
 -                      gpio_direction_output(pdata->buck_gpios[0],
 -                                      (s5m8767->buck_gpioindex >> 2) & 0x1);
 -                      /* SET2 GPIO */
 -                      gpio_direction_output(pdata->buck_gpios[1],
 -                                      (s5m8767->buck_gpioindex >> 1) & 0x1);
 -                      /* SET3 GPIO */
 -                      gpio_direction_output(pdata->buck_gpios[2],
 -                                      (s5m8767->buck_gpioindex >> 0) & 0x1);
 -                      ret = 0;
 -              } else {
 -                      dev_err(&pdev->dev, "GPIO NOT VALID\n");
 -                      ret = -EINVAL;
 +      if (gpio_is_valid(pdata->buck_gpios[0]) &&
 +              gpio_is_valid(pdata->buck_gpios[1]) &&
 +              gpio_is_valid(pdata->buck_gpios[2])) {
 +              ret = devm_gpio_request(&pdev->dev, pdata->buck_gpios[0],
 +                                      "S5M8767 SET1");
 +              if (ret)
                        return ret;
 -              }
 +
 +              ret = devm_gpio_request(&pdev->dev, pdata->buck_gpios[1],
 +                                      "S5M8767 SET2");
 +              if (ret)
 +                      return ret;
 +
 +              ret = devm_gpio_request(&pdev->dev, pdata->buck_gpios[2],
 +                                      "S5M8767 SET3");
 +              if (ret)
 +                      return ret;
 +
 +              /* SET1 GPIO */
 +              gpio_direction_output(pdata->buck_gpios[0],
 +                              (s5m8767->buck_gpioindex >> 2) & 0x1);
 +              /* SET2 GPIO */
 +              gpio_direction_output(pdata->buck_gpios[1],
 +                              (s5m8767->buck_gpioindex >> 1) & 0x1);
 +              /* SET3 GPIO */
 +              gpio_direction_output(pdata->buck_gpios[2],
 +                              (s5m8767->buck_gpioindex >> 0) & 0x1);
 +      } else {
 +              dev_err(&pdev->dev, "GPIO NOT VALID\n");
 +              ret = -EINVAL;
 +              return ret;
        }
  
 -      sec_reg_update(s5m8767->iodev, S5M8767_REG_BUCK2CTRL,
 -                      (pdata->buck2_gpiodvs) ? (1 << 1) : (0 << 1), 1 << 1);
 -      sec_reg_update(s5m8767->iodev, S5M8767_REG_BUCK3CTRL,
 -                      (pdata->buck3_gpiodvs) ? (1 << 1) : (0 << 1), 1 << 1);
 -      sec_reg_update(s5m8767->iodev, S5M8767_REG_BUCK4CTRL,
 -                      (pdata->buck4_gpiodvs) ? (1 << 1) : (0 << 1), 1 << 1);
 +      ret = devm_gpio_request(&pdev->dev, pdata->buck_ds[0], "S5M8767 DS2");
 +      if (ret)
 +              return ret;
 +
 +      ret = devm_gpio_request(&pdev->dev, pdata->buck_ds[1], "S5M8767 DS3");
 +      if (ret)
 +              return ret;
 +
 +      ret = devm_gpio_request(&pdev->dev, pdata->buck_ds[2], "S5M8767 DS4");
 +      if (ret)
 +              return ret;
 +
 +      /* DS2 GPIO */
 +      gpio_direction_output(pdata->buck_ds[0], 0x0);
 +      /* DS3 GPIO */
 +      gpio_direction_output(pdata->buck_ds[1], 0x0);
 +      /* DS4 GPIO */
 +      gpio_direction_output(pdata->buck_ds[2], 0x0);
 +
 +      if (pdata->buck2_gpiodvs || pdata->buck3_gpiodvs ||
 +         pdata->buck4_gpiodvs) {
-               s5m_reg_update(s5m8767->iodev, S5M8767_REG_BUCK2CTRL,
++              sec_reg_update(s5m8767->iodev, S5M8767_REG_BUCK2CTRL,
 +                              (pdata->buck2_gpiodvs) ? (1 << 1) : (0 << 1),
 +                              1 << 1);
-               s5m_reg_update(s5m8767->iodev, S5M8767_REG_BUCK3CTRL,
++              sec_reg_update(s5m8767->iodev, S5M8767_REG_BUCK3CTRL,
 +                              (pdata->buck3_gpiodvs) ? (1 << 1) : (0 << 1),
 +                              1 << 1);
-               s5m_reg_update(s5m8767->iodev, S5M8767_REG_BUCK4CTRL,
++              sec_reg_update(s5m8767->iodev, S5M8767_REG_BUCK4CTRL,
 +                              (pdata->buck4_gpiodvs) ? (1 << 1) : (0 << 1),
 +                              1 << 1);
 +      }
  
        /* Initialize GPIO DVS registers */
        for (i = 0; i < 8; i++) {
                                           s5m8767->buck4_vol[i]);
                }
        }
 -      sec_reg_update(s5m8767->iodev, S5M8767_REG_BUCK2CTRL, 0x78, 0xff);
 -      sec_reg_update(s5m8767->iodev, S5M8767_REG_BUCK3CTRL, 0x58, 0xff);
 -      sec_reg_update(s5m8767->iodev, S5M8767_REG_BUCK4CTRL, 0x78, 0xff);
  
        if (s5m8767->buck2_ramp)
-               s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 0x08, 0x08);
+               sec_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 0x08, 0x08);
  
        if (s5m8767->buck3_ramp)
-               s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 0x04, 0x04);
+               sec_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 0x04, 0x04);
  
        if (s5m8767->buck4_ramp)
-               s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 0x02, 0x02);
+               sec_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 0x02, 0x02);
  
        if (s5m8767->buck2_ramp || s5m8767->buck3_ramp
                || s5m8767->buck4_ramp) {
                switch (s5m8767->ramp_delay) {
 -              case 15:
 +              case 5:
-                       s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP,
+                       sec_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP,
 -                                      0xc0, 0xf0);
 +                                      0x40, 0xf0);
 +                      break;
 +              case 10:
-                       s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP,
++                      sec_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP,
 +                                      0x90, 0xf0);
                        break;
                case 25:
-                       s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP,
+                       sec_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP,
                                        0xd0, 0xf0);
                        break;
                case 50:
 
        }
  }
  
-                       gpio_request_one(pdata->reset_gpio_port[0],
-                                        GPIOF_OUT_INIT_LOW, "USB1 PHY reset");
 +static int omap_ehci_init(struct usb_hcd *hcd)
 +{
 +      struct ehci_hcd         *ehci = hcd_to_ehci(hcd);
 +      int                     rc;
 +      struct ehci_hcd_omap_platform_data      *pdata;
 +
 +      pdata = hcd->self.controller->platform_data;
++
++      /* Hold PHYs in reset while initializing EHCI controller */
 +      if (pdata->phy_reset) {
 +              if (gpio_is_valid(pdata->reset_gpio_port[0]))
-                       gpio_request_one(pdata->reset_gpio_port[1],
-                                        GPIOF_OUT_INIT_LOW, "USB2 PHY reset");
++                      gpio_set_value_cansleep(pdata->reset_gpio_port[0], 0);
 +
 +              if (gpio_is_valid(pdata->reset_gpio_port[1]))
++                      gpio_set_value_cansleep(pdata->reset_gpio_port[1], 0);
 +
 +              /* Hold the PHY in RESET for enough time till DIR is high */
 +              udelay(10);
 +      }
 +
 +      /* Soft reset the PHY using PHY reset command over ULPI */
 +      if (pdata->port_mode[0] == OMAP_EHCI_PORT_MODE_PHY)
 +              omap_ehci_soft_phy_reset(hcd, 0);
 +      if (pdata->port_mode[1] == OMAP_EHCI_PORT_MODE_PHY)
 +              omap_ehci_soft_phy_reset(hcd, 1);
 +
 +      /* we know this is the memory we want, no need to ioremap again */
 +      ehci->caps = hcd->regs;
 +
 +      rc = ehci_setup(hcd);
 +
 +      if (pdata->phy_reset) {
 +              /* Hold the PHY in RESET for enough time till
 +               * PHY is settled and ready
 +               */
 +              udelay(10);
 +
 +              if (gpio_is_valid(pdata->reset_gpio_port[0]))
 +                      gpio_set_value_cansleep(pdata->reset_gpio_port[0], 1);
 +
 +              if (gpio_is_valid(pdata->reset_gpio_port[1]))
 +                      gpio_set_value_cansleep(pdata->reset_gpio_port[1], 1);
 +      }
 +
 +      /* root ports should always stay powered */
 +      ehci_port_power(ehci, 1);
 +
 +      return rc;
 +}
 +
  static int omap_ehci_hub_control(
        struct usb_hcd  *hcd,
        u16             typeReq,