Initial Contribution
msm-2.6.38: tag AU_LINUX_ANDROID_GINGERBREAD.02.03.04.00.142
Signed-off-by: Bryan Huntsman <bryanh@codeaurora.org>
diff --git a/drivers/net/ks8851.c b/drivers/net/ks8851.c
index bcd9ba6..f79dce2 100644
--- a/drivers/net/ks8851.c
+++ b/drivers/net/ks8851.c
@@ -21,7 +21,7 @@
#include <linux/cache.h>
#include <linux/crc32.h>
#include <linux/mii.h>
-
+#include <linux/regulator/consumer.h>
#include <linux/spi/spi.h>
#include "ks8851.h"
@@ -127,6 +127,8 @@
struct spi_message spi_msg2;
struct spi_transfer spi_xfer1;
struct spi_transfer spi_xfer2[2];
+ struct regulator *vdd_io;
+ struct regulator *vdd_phy;
};
static int msg_enable;
@@ -1592,6 +1594,15 @@
ks = netdev_priv(ndev);
+ ks->vdd_io = regulator_get(&spi->dev, "vdd_io");
+ ks->vdd_phy = regulator_get(&spi->dev, "vdd_phy");
+
+ if (!IS_ERR(ks->vdd_io))
+ regulator_enable(ks->vdd_io);
+
+ if (!IS_ERR(ks->vdd_phy))
+ regulator_enable(ks->vdd_phy);
+
ks->netdev = ndev;
ks->spidev = spi;
ks->tx_space = 6144;
@@ -1686,6 +1697,16 @@
err_id:
err_irq:
free_netdev(ndev);
+
+ if (!IS_ERR(ks->vdd_io)) {
+ regulator_disable(ks->vdd_phy);
+ regulator_put(ks->vdd_io);
+ }
+
+ if (!IS_ERR(ks->vdd_phy)) {
+ regulator_disable(ks->vdd_phy);
+ regulator_put(ks->vdd_phy);
+ }
return ret;
}
@@ -1696,6 +1717,16 @@
if (netif_msg_drv(priv))
dev_info(&spi->dev, "remove\n");
+ if (!IS_ERR(priv->vdd_io)) {
+ regulator_disable(priv->vdd_phy);
+ regulator_put(priv->vdd_io);
+ }
+
+ if (!IS_ERR(priv->vdd_phy)) {
+ regulator_disable(priv->vdd_phy);
+ regulator_put(priv->vdd_phy);
+ }
+
unregister_netdev(priv->netdev);
free_irq(spi->irq, priv);
free_netdev(priv->netdev);