diff options
author | Alistair Francis <alistair@alistair23.me> | 2021-08-03 18:44:54 +1000 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2021-08-03 18:27:22 +0100 |
commit | d38d49b140043bba3ea27b89cca5fefaf08e2034 (patch) | |
tree | bb3d81282878ac4b6a8a2dbc88504954fcbb0989 /drivers | |
parent | 4cafe1aeb5fb4eb1778d5e1b91d50a078369dbe1 (diff) | |
download | linux-d38d49b140043bba3ea27b89cca5fefaf08e2034.tar.bz2 |
regulator: sy7636a: Store the epd-pwr-good GPIO locally
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>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/regulator/sy7636a-regulator.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/drivers/regulator/sy7636a-regulator.c b/drivers/regulator/sy7636a-regulator.c index 0bd21c3ea24a..37bf2a3c06b7 100644 --- a/drivers/regulator/sy7636a-regulator.c +++ b/drivers/regulator/sy7636a-regulator.c @@ -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; @@ -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); @@ -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) { |