static int __devinit ohci_at91_of_init(struct platform_device *pdev)
 {
        struct device_node *np = pdev->dev.of_node;
-       int i, ret, gpio;
+       int i, gpio;
        enum of_gpio_flags flags;
        struct at91_usbh_data   *pdata;
        u32 ports;
                if (!gpio_is_valid(gpio))
                        continue;
                pdata->vbus_pin_active_low[i] = flags & OF_GPIO_ACTIVE_LOW;
-               ret = gpio_request(gpio, "ohci_vbus");
-               if (ret) {
-                       dev_warn(&pdev->dev, "can't request vbus gpio %d", gpio);
-                       continue;
-               }
-               ret = gpio_direction_output(gpio, !(flags & OF_GPIO_ACTIVE_LOW) ^ 1);
-               if (ret)
-                       dev_warn(&pdev->dev, "can't put vbus gpio %d as output %d",
-                                !(flags & OF_GPIO_ACTIVE_LOW) ^ 1, gpio);
        }
 
-       for (i = 0; i < 2; i++) {
-               gpio = of_get_named_gpio_flags(np, "atmel,oc-gpio", i, &flags);
-               pdata->overcurrent_pin[i] = gpio;
-               if (!gpio_is_valid(gpio))
-                       continue;
-               ret = gpio_request(gpio, "ohci_overcurrent");
-               if (ret) {
-                       dev_err(&pdev->dev, "can't request overcurrent gpio %d", gpio);
-                       continue;
-               }
-
-               ret = gpio_direction_input(gpio);
-               if (ret) {
-                       dev_err(&pdev->dev, "can't configure overcurrent gpio %d as input", gpio);
-                       continue;
-               }
-
-               ret = request_irq(gpio_to_irq(gpio),
-                                 ohci_hcd_at91_overcurrent_irq,
-                                 IRQF_SHARED, "ohci_overcurrent", pdev);
-               if (ret) {
-                       gpio_free(gpio);
-                       dev_warn(& pdev->dev, "cannot get GPIO IRQ for overcurrent\n");
-               }
-       }
+       for (i = 0; i < 2; i++)
+               pdata->overcurrent_pin[i] =
+                       of_get_named_gpio_flags(np, "atmel,oc-gpio", i, &flags);
 
        pdev->dev.platform_data = pdata;
 
 {
        struct at91_usbh_data   *pdata;
        int                     i;
+       int                     gpio;
+       int                     ret;
 
        i = ohci_at91_of_init(pdev);
 
                for (i = 0; i < ARRAY_SIZE(pdata->vbus_pin); i++) {
                        if (!gpio_is_valid(pdata->vbus_pin[i]))
                                continue;
-                       gpio_request(pdata->vbus_pin[i], "ohci_vbus");
+                       gpio = pdata->vbus_pin[i];
+
+                       ret = gpio_request(gpio, "ohci_vbus");
+                       if (ret) {
+                               dev_err(&pdev->dev,
+                                       "can't request vbus gpio %d\n", gpio);
+                               continue;
+                       }
+                       ret = gpio_direction_output(gpio,
+                                               !pdata->vbus_pin_active_low[i]);
+                       if (ret) {
+                               dev_err(&pdev->dev,
+                                       "can't put vbus gpio %d as output %d\n",
+                                       gpio, !pdata->vbus_pin_active_low[i]);
+                               gpio_free(gpio);
+                               continue;
+                       }
+
                        ohci_at91_usb_set_power(pdata, i, 1);
                }
 
                for (i = 0; i < ARRAY_SIZE(pdata->overcurrent_pin); i++) {
-                       int ret;
-
                        if (!gpio_is_valid(pdata->overcurrent_pin[i]))
                                continue;
-                       gpio_request(pdata->overcurrent_pin[i], "ohci_overcurrent");
+                       gpio = pdata->overcurrent_pin[i];
+
+                       ret = gpio_request(gpio, "ohci_overcurrent");
+                       if (ret) {
+                               dev_err(&pdev->dev,
+                                       "can't request overcurrent gpio %d\n",
+                                       gpio);
+                               continue;
+                       }
+
+                       ret = gpio_direction_input(gpio);
+                       if (ret) {
+                               dev_err(&pdev->dev,
+                                       "can't configure overcurrent gpio %d as input\n",
+                                       gpio);
+                               gpio_free(gpio);
+                               continue;
+                       }
 
-                       ret = request_irq(gpio_to_irq(pdata->overcurrent_pin[i]),
+                       ret = request_irq(gpio_to_irq(gpio),
                                          ohci_hcd_at91_overcurrent_irq,
                                          IRQF_SHARED, "ohci_overcurrent", pdev);
                        if (ret) {
-                               gpio_free(pdata->overcurrent_pin[i]);
-                               dev_warn(& pdev->dev, "cannot get GPIO IRQ for overcurrent\n");
+                               gpio_free(gpio);
+                               dev_err(&pdev->dev,
+                                       "can't get gpio IRQ for overcurrent\n");
                        }
                }
        }