2020-10-01 12:37:51

by Frieder Schrempf

[permalink] [raw]
Subject: [PATCH 1/2] regulator: pca9450: Add SD_VSEL GPIO for LDO5

From: Frieder Schrempf <[email protected]>

LDO5 has two separate control registers. LDO5CTRL_L is used if the
input signal SD_VSEL is low and LDO5CTRL_H if it is high.
The current driver implementation only uses LDO5CTRL_H. To make this
work on boards that have SD_VSEL connected to a GPIO, we add support
for specifying an optional GPIO and setting it to high at probe time.

In the future we might also want to add support for boards that have
SD_VSEL set to a fixed low level. In this case we need to change the
driver to be able to use the LDO5CTRL_L register.

Signed-off-by: Frieder Schrempf <[email protected]>
---
drivers/regulator/pca9450-regulator.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)

diff --git a/drivers/regulator/pca9450-regulator.c b/drivers/regulator/pca9450-regulator.c
index eb5822bf53e0..fec7acc606f4 100644
--- a/drivers/regulator/pca9450-regulator.c
+++ b/drivers/regulator/pca9450-regulator.c
@@ -5,6 +5,7 @@
*/

#include <linux/err.h>
+#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/interrupt.h>
#include <linux/kernel.h>
@@ -32,6 +33,7 @@ struct pca9450_regulator_desc {
struct pca9450 {
struct device *dev;
struct regmap *regmap;
+ struct gpio_desc *sd_vsel_gpio;
enum pca9450_chip_type type;
unsigned int rcnt;
int irq;
@@ -795,6 +797,18 @@ static int pca9450_i2c_probe(struct i2c_client *i2c,
return ret;
}

+ /*
+ * The driver uses the LDO5CTRL_H register to control the LDO5 regulator.
+ * This is only valid if the SD_VSEL input of the PMIC is high. Let's
+ * check if the pin is available as GPIO and set it to high.
+ */
+ pca9450->sd_vsel_gpio = gpiod_get_optional(pca9450->dev, "sd-vsel", GPIOD_OUT_HIGH);
+
+ if (IS_ERR(pca9450->sd_vsel_gpio)) {
+ dev_err(&i2c->dev, "Failed to get SD_VSEL GPIO\n");
+ return ret;
+ }
+
dev_info(&i2c->dev, "%s probed.\n",
type == PCA9450_TYPE_PCA9450A ? "pca9450a" : "pca9450bc");

--
2.17.1


2020-10-01 12:57:32

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH 1/2] regulator: pca9450: Add SD_VSEL GPIO for LDO5

On Thu, Oct 01, 2020 at 02:34:31PM +0200, Schrempf Frieder wrote:

> + pca9450->sd_vsel_gpio = gpiod_get_optional(pca9450->dev, "sd-vsel", GPIOD_OUT_HIGH);

We need a patch adding this to the binding document too.


Attachments:
(No filename) (219.00 B)
signature.asc (499.00 B)
Download all attachments

2020-10-01 13:02:14

by Frieder Schrempf

[permalink] [raw]
Subject: Re: [PATCH 1/2] regulator: pca9450: Add SD_VSEL GPIO for LDO5



On 01.10.20 14:53, Mark Brown wrote:
> On Thu, Oct 01, 2020 at 02:34:31PM +0200, Schrempf Frieder wrote:
>
>> + pca9450->sd_vsel_gpio = gpiod_get_optional(pca9450->dev, "sd-vsel", GPIOD_OUT_HIGH);
>
> We need a patch adding this to the binding document too.

Right, totally forgot about that. Thanks for the reminder.