]> Pileus Git - ~andy/linux/blobdiff - drivers/usb/host/ohci-at91.c
Merge branch 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groec...
[~andy/linux] / drivers / usb / host / ohci-at91.c
index 95a9fec38e89b4e8a6daff8a3c0c75fd73315d4c..77afabc77f9be8d71fd4502bd5f315d9c8bd2c40 100644 (file)
@@ -139,8 +139,23 @@ static int usb_hcd_at91_probe(const struct hc_driver *driver,
        }
 
        iclk = clk_get(&pdev->dev, "ohci_clk");
+       if (IS_ERR(iclk)) {
+               dev_err(&pdev->dev, "failed to get ohci_clk\n");
+               retval = PTR_ERR(iclk);
+               goto err3;
+       }
        fclk = clk_get(&pdev->dev, "uhpck");
+       if (IS_ERR(fclk)) {
+               dev_err(&pdev->dev, "failed to get uhpck\n");
+               retval = PTR_ERR(fclk);
+               goto err4;
+       }
        hclk = clk_get(&pdev->dev, "hclk");
+       if (IS_ERR(hclk)) {
+               dev_err(&pdev->dev, "failed to get hclk\n");
+               retval = PTR_ERR(hclk);
+               goto err5;
+       }
 
        at91_start_hc(pdev);
        ohci_hcd_init(hcd_to_ohci(hcd));
@@ -153,9 +168,12 @@ static int usb_hcd_at91_probe(const struct hc_driver *driver,
        at91_stop_hc(pdev);
 
        clk_put(hclk);
+ err5:
        clk_put(fclk);
+ err4:
        clk_put(iclk);
 
+ err3:
        iounmap(hcd->regs);
 
  err2:
@@ -223,10 +241,11 @@ static void ohci_at91_usb_set_power(struct at91_usbh_data *pdata, int port, int
        if (port < 0 || port >= 2)
                return;
 
-       if (pdata->vbus_pin[port] <= 0)
+       if (!gpio_is_valid(pdata->vbus_pin[port]))
                return;
 
-       gpio_set_value(pdata->vbus_pin[port], !pdata->vbus_pin_inverted ^ enable);
+       gpio_set_value(pdata->vbus_pin[port],
+                      !pdata->vbus_pin_active_low[port] ^ enable);
 }
 
 static int ohci_at91_usb_get_power(struct at91_usbh_data *pdata, int port)
@@ -234,10 +253,11 @@ static int ohci_at91_usb_get_power(struct at91_usbh_data *pdata, int port)
        if (port < 0 || port >= 2)
                return -EINVAL;
 
-       if (pdata->vbus_pin[port] <= 0)
+       if (!gpio_is_valid(pdata->vbus_pin[port]))
                return -EINVAL;
 
-       return gpio_get_value(pdata->vbus_pin[port]) ^ !pdata->vbus_pin_inverted;
+       return gpio_get_value(pdata->vbus_pin[port]) ^
+               !pdata->vbus_pin_active_low[port];
 }
 
 /*
@@ -465,7 +485,7 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
 
        if (pdata) {
                for (i = 0; i < ARRAY_SIZE(pdata->vbus_pin); i++) {
-                       if (pdata->vbus_pin[i] <= 0)
+                       if (!gpio_is_valid(pdata->vbus_pin[i]))
                                continue;
                        gpio_request(pdata->vbus_pin[i], "ohci_vbus");
                        ohci_at91_usb_set_power(pdata, i, 1);
@@ -474,7 +494,7 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
                for (i = 0; i < ARRAY_SIZE(pdata->overcurrent_pin); i++) {
                        int ret;
 
-                       if (pdata->overcurrent_pin[i] <= 0)
+                       if (!gpio_is_valid(pdata->overcurrent_pin[i]))
                                continue;
                        gpio_request(pdata->overcurrent_pin[i], "ohci_overcurrent");
 
@@ -499,14 +519,14 @@ static int ohci_hcd_at91_drv_remove(struct platform_device *pdev)
 
        if (pdata) {
                for (i = 0; i < ARRAY_SIZE(pdata->vbus_pin); i++) {
-                       if (pdata->vbus_pin[i] <= 0)
+                       if (!gpio_is_valid(pdata->vbus_pin[i]))
                                continue;
                        ohci_at91_usb_set_power(pdata, i, 0);
                        gpio_free(pdata->vbus_pin[i]);
                }
 
                for (i = 0; i < ARRAY_SIZE(pdata->overcurrent_pin); i++) {
-                       if (pdata->overcurrent_pin[i] <= 0)
+                       if (!gpio_is_valid(pdata->overcurrent_pin[i]))
                                continue;
                        free_irq(gpio_to_irq(pdata->overcurrent_pin[i]), pdev);
                        gpio_free(pdata->overcurrent_pin[i]);