Commit e1739e86 authored by Linus Walleij's avatar Linus Walleij Committed by Mark Brown

regulator: arizona-ldo1: Look up a descriptor and pass to the core

Instead of passing a global GPIO number, pass a descriptor looked
up with the standard devm_gpiod_get_optional() call.

We have augmented the GPIO core to look up the regulator special
GPIO "wlf,ldoena" in commit 6a537d48
"gpio: of: Support regulator nonstandard GPIO properties".
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Acked-by: default avatarCharles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 54557ad9
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/spi/spi.h> #include <linux/spi/spi.h>
#include <linux/gpio/machine.h>
#include <linux/mfd/wm831x/irq.h> #include <linux/mfd/wm831x/irq.h>
#include <linux/mfd/wm831x/gpio.h> #include <linux/mfd/wm831x/gpio.h>
...@@ -206,9 +207,6 @@ static const struct i2c_board_info wm1277_devs[] = { ...@@ -206,9 +207,6 @@ static const struct i2c_board_info wm1277_devs[] = {
}; };
static struct arizona_pdata wm5102_reva_pdata = { static struct arizona_pdata wm5102_reva_pdata = {
.ldo1 = {
.ldoena = S3C64XX_GPN(7),
},
.gpio_base = CODEC_GPIO_BASE, .gpio_base = CODEC_GPIO_BASE,
.irq_flags = IRQF_TRIGGER_HIGH, .irq_flags = IRQF_TRIGGER_HIGH,
.micd_pol_gpio = CODEC_GPIO_BASE + 4, .micd_pol_gpio = CODEC_GPIO_BASE + 4,
...@@ -237,10 +235,16 @@ static struct spi_board_info wm5102_reva_spi_devs[] = { ...@@ -237,10 +235,16 @@ static struct spi_board_info wm5102_reva_spi_devs[] = {
}, },
}; };
static struct arizona_pdata wm5102_pdata = { static struct gpiod_lookup_table wm5102_reva_gpiod_table = {
.ldo1 = { .dev_id = "spi0.1", /* SPI device name */
.ldoena = S3C64XX_GPN(7), .table = {
GPIO_LOOKUP("GPION", 7,
"wlf,ldoena", GPIO_ACTIVE_HIGH),
{ },
}, },
};
static struct arizona_pdata wm5102_pdata = {
.gpio_base = CODEC_GPIO_BASE, .gpio_base = CODEC_GPIO_BASE,
.irq_flags = IRQF_TRIGGER_HIGH, .irq_flags = IRQF_TRIGGER_HIGH,
.micd_pol_gpio = CODEC_GPIO_BASE + 2, .micd_pol_gpio = CODEC_GPIO_BASE + 2,
...@@ -264,6 +268,15 @@ static struct spi_board_info wm5102_spi_devs[] = { ...@@ -264,6 +268,15 @@ static struct spi_board_info wm5102_spi_devs[] = {
}, },
}; };
static struct gpiod_lookup_table wm5102_gpiod_table = {
.dev_id = "spi0.1", /* SPI device name */
.table = {
GPIO_LOOKUP("GPION", 7,
"wlf,ldo1ena", GPIO_ACTIVE_HIGH),
{ },
},
};
static struct spi_board_info wm5110_spi_devs[] = { static struct spi_board_info wm5110_spi_devs[] = {
[0] = { [0] = {
.modalias = "wm5110", .modalias = "wm5110",
...@@ -366,6 +379,9 @@ static int wlf_gf_module_probe(struct i2c_client *i2c, ...@@ -366,6 +379,9 @@ static int wlf_gf_module_probe(struct i2c_client *i2c,
rev == gf_mods[i].rev)) rev == gf_mods[i].rev))
break; break;
gpiod_add_lookup_table(&wm5102_reva_gpiod_table);
gpiod_add_lookup_table(&wm5102_gpiod_table);
if (i < ARRAY_SIZE(gf_mods)) { if (i < ARRAY_SIZE(gf_mods)) {
dev_info(&i2c->dev, "%s revision %d\n", dev_info(&i2c->dev, "%s revision %d\n",
gf_mods[i].name, rev + 1); gf_mods[i].name, rev + 1);
......
...@@ -17,12 +17,11 @@ ...@@ -17,12 +17,11 @@
#include <linux/bitops.h> #include <linux/bitops.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_gpio.h> #include <linux/gpio/consumer.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/regulator/driver.h> #include <linux/regulator/driver.h>
#include <linux/regulator/machine.h> #include <linux/regulator/machine.h>
#include <linux/regulator/of_regulator.h> #include <linux/regulator/of_regulator.h>
#include <linux/gpio.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/regulator/arizona-ldo1.h> #include <linux/regulator/arizona-ldo1.h>
...@@ -198,16 +197,6 @@ static int arizona_ldo1_of_get_pdata(struct arizona_ldo1_pdata *pdata, ...@@ -198,16 +197,6 @@ static int arizona_ldo1_of_get_pdata(struct arizona_ldo1_pdata *pdata,
struct device_node *init_node, *dcvdd_node; struct device_node *init_node, *dcvdd_node;
struct regulator_init_data *init_data; struct regulator_init_data *init_data;
pdata->ldoena = of_get_named_gpio(np, "wlf,ldoena", 0);
if (pdata->ldoena < 0) {
dev_warn(config->dev,
"LDOENA GPIO property missing/malformed: %d\n",
pdata->ldoena);
pdata->ldoena = 0;
} else {
config->ena_gpio_initialized = true;
}
init_node = of_get_child_by_name(np, "ldo1"); init_node = of_get_child_by_name(np, "ldo1");
dcvdd_node = of_parse_phandle(np, "DCVDD-supply", 0); dcvdd_node = of_parse_phandle(np, "DCVDD-supply", 0);
...@@ -264,7 +253,11 @@ static int arizona_ldo1_common_init(struct platform_device *pdev, ...@@ -264,7 +253,11 @@ static int arizona_ldo1_common_init(struct platform_device *pdev,
} }
} }
config.ena_gpio = pdata->ldoena; /* We assume that high output = regulator off */
config.ena_gpiod = devm_gpiod_get_optional(&pdev->dev, "wlf,ldoena",
GPIOD_OUT_HIGH);
if (IS_ERR(config.ena_gpiod))
return PTR_ERR(config.ena_gpiod);
if (pdata->init_data) if (pdata->init_data)
config.init_data = pdata->init_data; config.init_data = pdata->init_data;
......
...@@ -14,9 +14,6 @@ ...@@ -14,9 +14,6 @@
struct regulator_init_data; struct regulator_init_data;
struct arizona_ldo1_pdata { struct arizona_ldo1_pdata {
/** GPIO controlling LDOENA, if any */
int ldoena;
/** Regulator configuration for LDO1 */ /** Regulator configuration for LDO1 */
const struct regulator_init_data *init_data; const struct regulator_init_data *init_data;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment