All of lore.kernel.org
 help / color / mirror / Atom feed
From: Linus Walleij <linus.walleij@linaro.org>
To: Liam Girdwood <lgirdwood@gmail.com>, Mark Brown <broonie@kernel.org>
Cc: linux-kernel@vger.kernel.org,
	Linus Walleij <linus.walleij@linaro.org>,
	patches@opensource.cirrus.com,
	Richard Fitzgerald <rf@opensource.cirrus.com>,
	Charles Keepax <ckeepax@opensource.cirrus.com>
Subject: [PATCH 03/19 v3] regulator: arizona-ldo1: Look up a descriptor and pass to the core
Date: Mon, 14 May 2018 10:06:24 +0200	[thread overview]
Message-ID: <20180514080640.12515-4-linus.walleij@linaro.org> (raw)
In-Reply-To: <20180514080640.12515-1-linus.walleij@linaro.org>

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 6a537d48461d
"gpio: of: Support regulator nonstandard GPIO properties".

Cc: patches@opensource.cirrus.com
Cc: Richard Fitzgerald <rf@opensource.cirrus.com>
Cc: Charles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
ChangeLog v2->v3:
- Fix "wlf,ldo1ena" to "wlf,ldoena" on WM5102 non-reva
ChangeLog v1->v2:
- Rebase the patch on the other changes.
- Make sure to update some s3c64xx platform data properly.
---
 arch/arm/mach-s3c64xx/mach-crag6410-module.c | 28 +++++++++++++++-----
 drivers/regulator/arizona-ldo1.c             | 19 +++++--------
 include/linux/regulator/arizona-ldo1.h       |  3 ---
 3 files changed, 28 insertions(+), 22 deletions(-)

diff --git a/arch/arm/mach-s3c64xx/mach-crag6410-module.c b/arch/arm/mach-s3c64xx/mach-crag6410-module.c
index f00988705408..5aa472892465 100644
--- a/arch/arm/mach-s3c64xx/mach-crag6410-module.c
+++ b/arch/arm/mach-s3c64xx/mach-crag6410-module.c
@@ -9,6 +9,7 @@
 #include <linux/interrupt.h>
 #include <linux/i2c.h>
 #include <linux/spi/spi.h>
+#include <linux/gpio/machine.h>
 
 #include <linux/mfd/wm831x/irq.h>
 #include <linux/mfd/wm831x/gpio.h>
@@ -206,9 +207,6 @@ static const struct i2c_board_info wm1277_devs[] = {
 };
 
 static struct arizona_pdata wm5102_reva_pdata = {
-	.ldo1 = {
-		.ldoena = S3C64XX_GPN(7),
-	},
 	.gpio_base = CODEC_GPIO_BASE,
 	.irq_flags = IRQF_TRIGGER_HIGH,
 	.micd_pol_gpio = CODEC_GPIO_BASE + 4,
@@ -237,10 +235,16 @@ static struct spi_board_info wm5102_reva_spi_devs[] = {
 	},
 };
 
-static struct arizona_pdata wm5102_pdata = {
-	.ldo1 = {
-		.ldoena = S3C64XX_GPN(7),
+static struct gpiod_lookup_table wm5102_reva_gpiod_table = {
+	.dev_id = "spi0.1", /* SPI device name */
+	.table = {
+		GPIO_LOOKUP("GPION", 7,
+			    "wlf,ldoena", GPIO_ACTIVE_HIGH),
+		{ },
 	},
+};
+
+static struct arizona_pdata wm5102_pdata = {
 	.gpio_base = CODEC_GPIO_BASE,
 	.irq_flags = IRQF_TRIGGER_HIGH,
 	.micd_pol_gpio = CODEC_GPIO_BASE + 2,
@@ -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[] = {
 	[0] = {
 		.modalias	= "wm5110",
@@ -366,6 +379,9 @@ static int wlf_gf_module_probe(struct i2c_client *i2c,
 					    rev == gf_mods[i].rev))
 			break;
 
+	gpiod_add_lookup_table(&wm5102_reva_gpiod_table);
+	gpiod_add_lookup_table(&wm5102_gpiod_table);
+
 	if (i < ARRAY_SIZE(gf_mods)) {
 		dev_info(&i2c->dev, "%s revision %d\n",
 			 gf_mods[i].name, rev + 1);
diff --git a/drivers/regulator/arizona-ldo1.c b/drivers/regulator/arizona-ldo1.c
index 96fddfff5dc4..f6d6a4ad9e8a 100644
--- a/drivers/regulator/arizona-ldo1.c
+++ b/drivers/regulator/arizona-ldo1.c
@@ -17,12 +17,11 @@
 #include <linux/bitops.h>
 #include <linux/err.h>
 #include <linux/of.h>
-#include <linux/of_gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/platform_device.h>
 #include <linux/regulator/driver.h>
 #include <linux/regulator/machine.h>
 #include <linux/regulator/of_regulator.h>
-#include <linux/gpio.h>
 #include <linux/slab.h>
 
 #include <linux/regulator/arizona-ldo1.h>
@@ -198,16 +197,6 @@ static int arizona_ldo1_of_get_pdata(struct arizona_ldo1_pdata *pdata,
 	struct device_node *init_node, *dcvdd_node;
 	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");
 	dcvdd_node = of_parse_phandle(np, "DCVDD-supply", 0);
 
@@ -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)
 		config.init_data = pdata->init_data;
diff --git a/include/linux/regulator/arizona-ldo1.h b/include/linux/regulator/arizona-ldo1.h
index c685f1277c63..fe74ab9990e6 100644
--- a/include/linux/regulator/arizona-ldo1.h
+++ b/include/linux/regulator/arizona-ldo1.h
@@ -14,9 +14,6 @@
 struct regulator_init_data;
 
 struct arizona_ldo1_pdata {
-	/** GPIO controlling LDOENA, if any */
-	int ldoena;
-
 	/** Regulator configuration for LDO1 */
 	const struct regulator_init_data *init_data;
 };
-- 
2.17.0

  parent reply	other threads:[~2018-05-14  8:07 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-14  8:06 [PATCH 00/19 v3] Refactor fixed and GPIO regulators Linus Walleij
2018-05-14  8:06 ` [PATCH 01/19 v3] regulator: fixed: Convert to use GPIO descriptor only Linus Walleij
2018-05-14 11:03   ` Andy Shevchenko
2018-05-21 11:27     ` Linus Walleij
2018-07-06 15:21       ` Andy Shevchenko
2018-05-14 11:49   ` Geert Uytterhoeven
2018-05-17 19:50   ` Tony Lindgren
2018-05-30 21:27   ` Arnd Bergmann
2018-06-01  9:35   ` Thierry Reding
2018-06-01  9:36     ` Thierry Reding
2018-06-01 10:21     ` Mark Brown
2018-06-11 13:11     ` Linus Walleij
2018-06-11 15:00       ` Mark Brown
2018-06-12  8:15         ` Linus Walleij
2018-06-12 11:00           ` Mark Brown
2018-05-14  8:06 ` [PATCH 02/19 v3] regulator: gpio: Get enable GPIO using GPIO descriptor Linus Walleij
2018-05-14  8:06 ` Linus Walleij [this message]
2018-05-15 11:53   ` [PATCH 03/19 v3] regulator: arizona-ldo1: Look up a descriptor and pass to the core Charles Keepax
2018-05-17 16:41   ` Applied "regulator: arizona-ldo1: Look up a descriptor and pass to the core" to the regulator tree Mark Brown
2018-05-14  8:06 ` [PATCH 04/19 v3] regulator: max8973: Pass descriptor instead of GPIO number Linus Walleij
2018-05-14  8:06 ` [PATCH 05/19 v3] regulator: max77686: " Linus Walleij
2018-05-14  9:28   ` Krzysztof Kozlowski
2018-05-17 16:41   ` Applied "regulator: max77686: Pass descriptor instead of GPIO number" to the regulator tree Mark Brown
2018-05-14  8:06 ` [PATCH 06/19 v3] regulator: lm363x: Pass descriptor instead of GPIO number Linus Walleij
2018-05-14  8:06 ` [PATCH 07/19 v3] regulator: lp8788-ldo: " Linus Walleij
2018-05-14  8:06 ` [PATCH 08/19 v3] regulator: max8952: " Linus Walleij
2018-05-14  8:06 ` [PATCH 09/19 v3] regulator: pfuze100: Delete reference to ena_gpio Linus Walleij
2018-05-14  8:06 ` [PATCH 10/19 v3] regulator: s2mps11: Pass descriptor instead of GPIO number Linus Walleij
2018-05-14  9:42   ` Krzysztof Kozlowski
2018-05-26 10:02   ` Mark Brown
2018-05-28  8:41     ` Linus Walleij
     [not found]       ` <CGME20180528112908eucas1p2946a9b6385fcaf6c19921c9767420405@eucas1p2.samsung.com>
2018-05-28 11:29         ` Bartlomiej Zolnierkiewicz
2018-05-28 12:26           ` Andy Shevchenko
2018-05-30  7:10             ` Linus Walleij
2018-05-29 14:47           ` Mark Brown
     [not found]           ` <CGME20180530134408eucas1p14c6d7fe692e2ed91ef833c8a1ead8ce7@eucas1p1.samsung.com>
2018-05-30 13:44             ` Bartlomiej Zolnierkiewicz
2018-05-30 14:16               ` Mark Brown
2018-05-14  8:06 ` [PATCH 11/19 v3] regulator: s5m8767: " Linus Walleij
2018-05-14  8:06 ` [PATCH 12/19 v3] regulator: tps65090: " Linus Walleij
2018-05-14  8:06 ` [PATCH 13/19 v3] regulator: wm8994: " Linus Walleij
2018-05-14  8:06 ` [PATCH 14/19 v3] regulator: core: Only support passing enable GPIO descriptors Linus Walleij
2018-05-14  8:06 ` [PATCH 15/19 v3] regulator: fixed/gpio: Pull inversion/OD into gpiolib Linus Walleij
2018-05-29 14:54   ` Mark Brown
2018-05-30  7:15     ` Linus Walleij
2018-05-14  8:06 ` [PATCH 16/19 v3] regulator: fixed/gpio: Update device tree bindings Linus Walleij
2018-05-14  8:06 ` [PATCH 17/19 v3] regulator: gpio: Convert to fully use descriptors Linus Walleij
2018-05-14  8:06 ` [PATCH 18/19 v3] regulator: gpio: Simplify probe path Linus Walleij
2018-05-14  8:06 ` [PATCH 19/19 v3] ARM: s3c64xx: Tidy up handling of regulator GPIO lookups Linus Walleij
2018-05-17  5:06   ` Mark Brown
2018-05-21 11:24     ` Linus Walleij

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180514080640.12515-4-linus.walleij@linaro.org \
    --to=linus.walleij@linaro.org \
    --cc=broonie@kernel.org \
    --cc=ckeepax@opensource.cirrus.com \
    --cc=lgirdwood@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=patches@opensource.cirrus.com \
    --cc=rf@opensource.cirrus.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.