Bluetooth: hci_bcm: Simplify clk_get error handling
[linux-2.6-block.git] / drivers / bluetooth / hci_bcm.c
index ddbd8c6a0cebd5cc7ef5d079533a31383518e5f4..ff73ecb8215f8bfe5cb1dcfc1f1df78ccca2fa17 100644 (file)
@@ -214,7 +214,7 @@ static int bcm_gpio_set_power(struct bcm_device *dev, bool powered)
 {
        int err;
 
-       if (powered && !IS_ERR(dev->clk) && !dev->clk_enabled) {
+       if (powered && !dev->clk_enabled) {
                err = clk_prepare_enable(dev->clk);
                if (err)
                        return err;
@@ -228,7 +228,7 @@ static int bcm_gpio_set_power(struct bcm_device *dev, bool powered)
        if (err)
                goto err_revert_shutdown;
 
-       if (!powered && !IS_ERR(dev->clk) && dev->clk_enabled)
+       if (!powered && dev->clk_enabled)
                clk_disable_unprepare(dev->clk);
 
        dev->clk_enabled = powered;
@@ -238,7 +238,7 @@ static int bcm_gpio_set_power(struct bcm_device *dev, bool powered)
 err_revert_shutdown:
        dev->set_shutdown(dev, !powered);
 err_clk_disable:
-       if (powered && !IS_ERR(dev->clk) && !dev->clk_enabled)
+       if (powered && !dev->clk_enabled)
                clk_disable_unprepare(dev->clk);
        return err;
 }
@@ -907,6 +907,14 @@ static int bcm_get_resources(struct bcm_device *dev)
 
        dev->clk = devm_clk_get(dev->dev, NULL);
 
+       /* Handle deferred probing */
+       if (dev->clk == ERR_PTR(-EPROBE_DEFER))
+               return PTR_ERR(dev->clk);
+
+       /* Ignore all other errors as before */
+       if (IS_ERR(dev->clk))
+               dev->clk = NULL;
+
        dev->device_wakeup = devm_gpiod_get_optional(dev->dev, "device-wakeup",
                                                     GPIOD_OUT_LOW);
        if (IS_ERR(dev->device_wakeup))