Skip to content

Commit

Permalink
regulator: sy7636a: Store the epd-pwr-good GPIO locally
Browse files Browse the repository at this point in the history
Instead of storing the GPIO state in the mfd (where it isn't used) store
it in the regulator.

Signed-off-by: Alistair Francis <alistair@alistair23.me>
Link: https://lore.kernel.org/r/20210803084456.198-7-alistair@alistair23.me
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
Alistair Francis authored and Mark Brown committed Aug 3, 2021
1 parent 4cafe1a commit d38d49b
Showing 1 changed file with 16 additions and 5 deletions.
21 changes: 16 additions & 5 deletions drivers/regulator/sy7636a-regulator.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@
#include <linux/gpio/consumer.h>
#include <linux/mfd/sy7636a.h>

struct sy7636a_data {
struct sy7636a *sy7636a;
struct gpio_desc *pgood_gpio;
};

static int sy7636a_get_vcom_voltage_op(struct regulator_dev *rdev)
{
int ret;
Expand All @@ -33,10 +38,10 @@ static int sy7636a_get_vcom_voltage_op(struct regulator_dev *rdev)

static int sy7636a_get_status(struct regulator_dev *rdev)
{
struct sy7636a *sy7636a = dev_get_drvdata(rdev->dev.parent);
struct sy7636a_data *data = dev_get_drvdata(rdev->dev.parent);
int ret = 0;

ret = gpiod_get_value_cansleep(sy7636a->pgood_gpio);
ret = gpiod_get_value_cansleep(data->pgood_gpio);
if (ret < 0)
dev_err(&rdev->dev, "Failed to read pgood gpio: %d\n", ret);

Expand Down Expand Up @@ -69,20 +74,26 @@ static int sy7636a_regulator_probe(struct platform_device *pdev)
struct regulator_config config = { };
struct regulator_dev *rdev;
struct gpio_desc *gdp;
struct sy7636a_data *data;
int ret;

if (!sy7636a)
return -EPROBE_DEFER;

platform_set_drvdata(pdev, sy7636a);

gdp = devm_gpiod_get(pdev->dev.parent, "epd-pwr-good", GPIOD_IN);
if (IS_ERR(gdp)) {
dev_err(pdev->dev.parent, "Power good GPIO fault %ld\n", PTR_ERR(gdp));
return PTR_ERR(gdp);
}

sy7636a->pgood_gpio = gdp;
data = devm_kzalloc(&pdev->dev, sizeof(struct sy7636a_data), GFP_KERNEL);
if (!data)
return -ENOMEM;

data->sy7636a = sy7636a;
data->pgood_gpio = gdp;

platform_set_drvdata(pdev, data);

ret = regmap_write(sy7636a->regmap, SY7636A_REG_POWER_ON_DELAY_TIME, 0x0);
if (ret) {
Expand Down

0 comments on commit d38d49b

Please sign in to comment.