wl1251: spi: add vio regulator support
authorSebastian Reichel <sre@debian.org>
Fri, 14 Feb 2014 23:05:54 +0000 (00:05 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 28 Feb 2014 19:08:27 +0000 (14:08 -0500)
This patch adds support for requesting the regulator powering
the vio pin.

Signed-off-by: Sebastian Reichel <sre@debian.org>
Reviewed-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ti/wl1251/spi.c
drivers/net/wireless/ti/wl1251/wl1251.h

index 6abcbc3f7fc7d6c207c79b3f4fc5e0c0bc23d206..0a8aacceedd1322ee448a63620f190d7e96099ae 100644 (file)
@@ -27,6 +27,7 @@
 #include <linux/spi/spi.h>
 #include <linux/wl12xx.h>
 #include <linux/gpio.h>
+#include <linux/regulator/consumer.h>
 
 #include "wl1251.h"
 #include "reg.h"
@@ -306,13 +307,26 @@ static int wl1251_spi_probe(struct spi_device *spi)
 
        irq_set_irq_type(wl->irq, IRQ_TYPE_EDGE_RISING);
 
-       ret = wl1251_init_ieee80211(wl);
+       wl->vio = devm_regulator_get(&spi->dev, "vio");
+       if (IS_ERR(wl->vio)) {
+               ret = PTR_ERR(wl->vio);
+               wl1251_error("vio regulator missing: %d", ret);
+               goto out_free;
+       }
+
+       ret = regulator_enable(wl->vio);
        if (ret)
                goto out_free;
 
+       ret = wl1251_init_ieee80211(wl);
+       if (ret)
+               goto disable_regulator;
+
        return 0;
 
- out_free:
+disable_regulator:
+       regulator_disable(wl->vio);
+out_free:
        ieee80211_free_hw(hw);
 
        return ret;
@@ -324,6 +338,7 @@ static int wl1251_spi_remove(struct spi_device *spi)
 
        free_irq(wl->irq, wl);
        wl1251_free_hw(wl);
+       regulator_disable(wl->vio);
 
        return 0;
 }
index 389fe25af1b6240b8b21f7e17b794423c29df3eb..16dae5269175ec7d531e516a9077f1e112a95d57 100644 (file)
@@ -280,6 +280,8 @@ struct wl1251 {
        int irq;
        bool use_eeprom;
 
+       struct regulator *vio;
+
        spinlock_t wl_lock;
 
        enum wl1251_state state;