linux-kernel.vger.kernel.org archive mirror
 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, linux-gpio@vger.kernel.org,
	Linus Walleij <linus.walleij@linaro.org>,
	Milo Kim <milo.kim@ti.com>, Lee Jones <lee.jones@linaro.org>
Subject: [PATCH 10/21] regulator: lp8788-ldo: Pass descriptor instead of GPIO number
Date: Mon, 12 Feb 2018 14:17:06 +0100	[thread overview]
Message-ID: <20180212131717.27193-11-linus.walleij@linaro.org> (raw)
In-Reply-To: <20180212131717.27193-1-linus.walleij@linaro.org>

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

This driver has supported passing a LDO enable GPIO for years,
yet this facility has never been put to use in the upstream kernel.
If someone desires to put in place GPIO control for the LDOs,
this can be done by adding a GPIO descriptor table in the MFD
nexus in drivers/mfd/lp8788.c for the LDO device when spawning the
MFD children, or using a board file.

Cc: Milo Kim <milo.kim@ti.com>
Cc: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
Lee: would be nice if you could ACK this smallish patch to
the MFD header.
---
 drivers/regulator/lp8788-ldo.c | 32 ++++++++++++++++----------------
 include/linux/mfd/lp8788.h     | 16 ----------------
 2 files changed, 16 insertions(+), 32 deletions(-)

diff --git a/drivers/regulator/lp8788-ldo.c b/drivers/regulator/lp8788-ldo.c
index cbfd35873575..f2347474a106 100644
--- a/drivers/regulator/lp8788-ldo.c
+++ b/drivers/regulator/lp8788-ldo.c
@@ -16,7 +16,7 @@
 #include <linux/err.h>
 #include <linux/platform_device.h>
 #include <linux/regulator/driver.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/mfd/lp8788.h>
 
 /* register address */
@@ -85,8 +85,6 @@
 #define LP8788_STARTUP_TIME_S		3
 
 #define ENABLE_TIME_USEC		32
-#define ENABLE				GPIOF_OUT_INIT_HIGH
-#define DISABLE				GPIOF_OUT_INIT_LOW
 
 enum lp8788_ldo_id {
 	DLDO1,
@@ -117,7 +115,7 @@ struct lp8788_ldo {
 	struct lp8788 *lp;
 	struct regulator_desc *desc;
 	struct regulator_dev *regulator;
-	struct lp8788_ldo_enable_pin *en_pin;
+	struct gpio_desc *ena_gpiod;
 };
 
 /* DLDO 1, 2, 3, 9 voltage table */
@@ -469,7 +467,6 @@ static int lp8788_config_ldo_enable_mode(struct platform_device *pdev,
 					enum lp8788_ldo_id id)
 {
 	struct lp8788 *lp = ldo->lp;
-	struct lp8788_platform_data *pdata = lp->pdata;
 	enum lp8788_ext_ldo_en_id enable_id;
 	u8 en_mask[] = {
 		[EN_ALDO1]   = LP8788_EN_SEL_ALDO1_M,
@@ -504,11 +501,18 @@ static int lp8788_config_ldo_enable_mode(struct platform_device *pdev,
 		return 0;
 	}
 
-	/* if no platform data for ldo pin, then set default enable mode */
-	if (!pdata || !pdata->ldo_pin || !pdata->ldo_pin[enable_id])
+	/* FIXME: check default mode for GPIO here: high or low? */
+	ldo->ena_gpiod = devm_gpiod_get_index_optional(&pdev->dev,
+						       "enable",
+						       enable_id,
+						       GPIOD_OUT_HIGH);
+	if (IS_ERR(ldo->ena_gpiod))
+		return PTR_ERR(ldo->ena_gpiod);
+
+	/* if no GPIO for ldo pin, then set default enable mode */
+	if (!ldo->ena_gpiod)
 		goto set_default_ldo_enable_mode;
 
-	ldo->en_pin = pdata->ldo_pin[enable_id];
 	return 0;
 
 set_default_ldo_enable_mode:
@@ -533,10 +537,8 @@ static int lp8788_dldo_probe(struct platform_device *pdev)
 	if (ret)
 		return ret;
 
-	if (ldo->en_pin) {
-		cfg.ena_gpio = ldo->en_pin->gpio;
-		cfg.ena_gpio_flags = ldo->en_pin->init_state;
-	}
+	if (ldo->ena_gpiod)
+		cfg.ena_gpiod = ldo->ena_gpiod;
 
 	cfg.dev = pdev->dev.parent;
 	cfg.init_data = lp->pdata ? lp->pdata->dldo_data[id] : NULL;
@@ -582,10 +584,8 @@ static int lp8788_aldo_probe(struct platform_device *pdev)
 	if (ret)
 		return ret;
 
-	if (ldo->en_pin) {
-		cfg.ena_gpio = ldo->en_pin->gpio;
-		cfg.ena_gpio_flags = ldo->en_pin->init_state;
-	}
+	if (ldo->ena_gpiod)
+		cfg.ena_gpiod = ldo->ena_gpiod;
 
 	cfg.dev = pdev->dev.parent;
 	cfg.init_data = lp->pdata ? lp->pdata->aldo_data[id] : NULL;
diff --git a/include/linux/mfd/lp8788.h b/include/linux/mfd/lp8788.h
index 786bf6679a28..2010e0de3e34 100644
--- a/include/linux/mfd/lp8788.h
+++ b/include/linux/mfd/lp8788.h
@@ -181,20 +181,6 @@ struct lp8788_buck2_dvs {
 	enum lp8788_dvs_sel vsel;
 };
 
-/*
- * struct lp8788_ldo_enable_pin
- *
- *   Basically, all LDOs are enabled through the I2C commands.
- *   But ALDO 1 ~ 5, 7, DLDO 7, 9, 11 can be enabled by external gpio pins.
- *
- * @gpio         : gpio number which is used for enabling ldos
- * @init_state   : initial gpio state (ex. GPIOF_OUT_INIT_LOW)
- */
-struct lp8788_ldo_enable_pin {
-	int gpio;
-	int init_state;
-};
-
 /*
  * struct lp8788_chg_param
  * @addr         : charging control register address (range : 0x11 ~ 0x1C)
@@ -288,7 +274,6 @@ struct lp8788_vib_platform_data {
  * @aldo_data    : regulator initial data for analog ldo
  * @buck1_dvs    : gpio configurations for buck1 dvs
  * @buck2_dvs    : gpio configurations for buck2 dvs
- * @ldo_pin      : gpio configurations for enabling LDOs
  * @chg_pdata    : platform data for charger driver
  * @alarm_sel    : rtc alarm selection (1 or 2)
  * @bl_pdata     : configurable data for backlight driver
@@ -306,7 +291,6 @@ struct lp8788_platform_data {
 	struct regulator_init_data *aldo_data[LP8788_NUM_ALDOS];
 	struct lp8788_buck1_dvs *buck1_dvs;
 	struct lp8788_buck2_dvs *buck2_dvs;
-	struct lp8788_ldo_enable_pin *ldo_pin[EN_LDOS_MAX];
 
 	/* charger */
 	struct lp8788_charger_platform_data *chg_pdata;
-- 
2.14.3

  parent reply	other threads:[~2018-02-12 13:20 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-12 13:16 [PATCH 00/21] regulator: switch core to GPIO descriptors Linus Walleij
2018-02-12 13:16 ` [PATCH 01/21] regulator: core: Support passing an initialized GPIO enable descriptor Linus Walleij
2018-02-16 17:12   ` Applied "regulator: core: Support passing an initialized GPIO enable descriptor" to the regulator tree Mark Brown
2018-02-12 13:16 ` [PATCH 02/21] regulator: fixed: Convert to use GPIO descriptor only Linus Walleij
2018-02-12 15:13   ` Andy Shevchenko
2018-04-19 12:36     ` Linus Walleij
2018-02-12 13:16 ` [PATCH 03/21] regulator: gpio: Get enable GPIO using GPIO descriptor Linus Walleij
2018-05-29 14:59   ` Applied "regulator: gpio: Get enable GPIO using GPIO descriptor" to the regulator tree Mark Brown
2018-02-12 13:17 ` [PATCH 04/21] regulator: da9055: Pass descriptor instead of GPIO number Linus Walleij
2018-02-12 14:59   ` Lee Jones
2018-02-16 17:12   ` Applied "regulator: da9055: Pass descriptor instead of GPIO number" to the regulator tree Mark Brown
2018-02-12 13:17 ` [PATCH 05/21] regulator: arizona-ldo1: Look up a descriptor and pass to the core Linus Walleij
2018-02-13 11:06   ` Charles Keepax
2018-04-19 13:43     ` Linus Walleij
2018-04-19 15:02       ` Charles Keepax
2018-02-13 11:51   ` Charles Keepax
2018-02-12 13:17 ` [PATCH 06/21] regulator: da9211: Pass descriptors instead of GPIO numbers Linus Walleij
2018-02-16 17:12   ` Applied "regulator: da9211: Pass descriptors instead of GPIO numbers" to the regulator tree Mark Brown
2018-02-12 13:17 ` [PATCH 07/21] regulator: max8973: Pass descriptor instead of GPIO number Linus Walleij
2018-05-24 19:14   ` Applied "regulator: max8973: Pass descriptor instead of GPIO number" to the regulator tree Mark Brown
2018-02-12 13:17 ` [PATCH 08/21] regulator: max77686: Pass descriptor instead of GPIO number Linus Walleij
2018-02-12 13:37   ` Krzysztof Kozlowski
2018-02-12 13:17 ` [PATCH 09/21] regulator: lm363x: " Linus Walleij
2018-05-24 19:14   ` Applied "regulator: lm363x: Pass descriptor instead of GPIO number" to the regulator tree Mark Brown
2018-02-12 13:17 ` Linus Walleij [this message]
2018-02-12 14:59   ` [PATCH 10/21] regulator: lp8788-ldo: Pass descriptor instead of GPIO number Lee Jones
2018-05-24 19:14   ` Applied "regulator: lp8788-ldo: Pass descriptor instead of GPIO number" to the regulator tree Mark Brown
2018-02-12 13:17 ` [PATCH 11/21] regulator: max8952: Pass descriptor instead of GPIO number Linus Walleij
2018-05-24 19:14   ` Applied "regulator: max8952: Pass descriptor instead of GPIO number" to the regulator tree Mark Brown
2018-02-12 13:17 ` [PATCH 12/21] regulator: pfuze100: Delete reference to ena_gpio Linus Walleij
2018-05-24 19:14   ` Applied "regulator: pfuze100: Delete reference to ena_gpio" to the regulator tree Mark Brown
2018-02-12 13:17 ` [PATCH 13/21] regulator: s2mps11: Pass descriptor instead of GPIO number Linus Walleij
2018-05-17 16:41   ` Applied "regulator: s2mps11: Pass descriptor instead of GPIO number" to the regulator tree Mark Brown
2018-02-12 13:17 ` [PATCH 14/21] regulator: s5m8767: Pass descriptor instead of GPIO number Linus Walleij
2018-02-12 14:58   ` Lee Jones
2018-05-24 19:13   ` Applied "regulator: s5m8767: Pass descriptor instead of GPIO number" to the regulator tree Mark Brown
2018-02-12 13:17 ` [PATCH 15/21] regulator: tps65090: Pass descriptor instead of GPIO number Linus Walleij
2018-02-12 14:58   ` Lee Jones
2018-05-24 19:13   ` Applied "regulator: tps65090: Pass descriptor instead of GPIO number" to the regulator tree Mark Brown
2018-02-12 13:17 ` [PATCH 16/21] regulator: wm8994: Pass descriptor instead of GPIO number Linus Walleij
2018-02-12 14:58   ` Lee Jones
2018-02-13 11:11   ` Charles Keepax
2018-04-19 13:55     ` Linus Walleij
2018-04-19 14:05       ` Mark Brown
2018-04-19 15:01       ` [PATCH] ARM: s3c64xx: Tidy up handling of regulator GPIO lookups Charles Keepax
2018-05-14  5:54         ` Linus Walleij
2018-02-13 11:52   ` [PATCH 16/21] regulator: wm8994: Pass descriptor instead of GPIO number Charles Keepax
2018-02-12 13:17 ` [PATCH 17/21] regulator: core: Only support passing enable GPIO descriptors Linus Walleij
2018-02-12 13:17 ` [PATCH 18/21] regulator: fixed/gpio: Pull inversion/OD into gpiolib Linus Walleij
2018-02-17  9:59   ` Robert Jarzmik
2018-02-12 13:17 ` [PATCH 19/21] regulator: fixed/gpio: Update device tree bindings Linus Walleij
2018-02-19  2:41   ` Rob Herring
2018-02-12 13:17 ` [PATCH 20/21] regulator: gpio: Convert to fully use descriptors Linus Walleij
2018-02-12 13:17 ` [PATCH 21/21] regulator: gpio: Simplify probe path 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=20180212131717.27193-11-linus.walleij@linaro.org \
    --to=linus.walleij@linaro.org \
    --cc=broonie@kernel.org \
    --cc=lee.jones@linaro.org \
    --cc=lgirdwood@gmail.com \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=milo.kim@ti.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).