lkml.org 
[lkml]   [2018]   [Feb]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 03/21] regulator: gpio: Get enable GPIO using GPIO descriptor
    Date
    We augment the GPIO regulator to get the *enable* regulator
    GPIO line (not the other lines) using a descriptor rather than
    a global number.

    We then pass this into the regulator core which has been
    prepared to hande enable descriptors in a separate patch.

    Switch over the two boardfiles using this facility and clean
    up so we only pass descriptors around.

    Cc: Philipp Zabel <philipp.zabel@gmail.com> # HX4700/Magician maintainer
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    ---
    arch/arm/mach-pxa/hx4700.c | 12 +++++++++++-
    arch/arm/mach-pxa/magician.c | 11 ++++++++++-
    drivers/regulator/gpio-regulator.c | 23 +++++++++++------------
    include/linux/regulator/gpio-regulator.h | 3 ---
    4 files changed, 32 insertions(+), 17 deletions(-)

    diff --git a/arch/arm/mach-pxa/hx4700.c b/arch/arm/mach-pxa/hx4700.c
    index e2e7f247a645..6717a10180eb 100644
    --- a/arch/arm/mach-pxa/hx4700.c
    +++ b/arch/arm/mach-pxa/hx4700.c
    @@ -20,6 +20,7 @@
    #include <linux/delay.h>
    #include <linux/fb.h>
    #include <linux/gpio.h>
    +#include <linux/gpio/machine.h>
    #include <linux/gpio_keys.h>
    #include <linux/input.h>
    #include <linux/input/navpoint.h>
    @@ -711,7 +712,6 @@ static struct gpio_regulator_state bq24022_states[] = {
    static struct gpio_regulator_config bq24022_info = {
    .supply_name = "bq24022",

    - .enable_gpio = GPIO72_HX4700_BQ24022_nCHARGE_EN,
    .enable_high = 0,
    .enabled_at_boot = 0,

    @@ -733,6 +733,15 @@ static struct platform_device bq24022 = {
    },
    };

    +static struct gpiod_lookup_table bq24022_gpiod_table = {
    + .dev_id = "gpio-regulator",
    + .table = {
    + GPIO_LOOKUP("gpio-pxa", GPIO72_HX4700_BQ24022_nCHARGE_EN,
    + "enable", GPIO_ACTIVE_HIGH),
    + { },
    + },
    +};
    +
    /*
    * StrataFlash
    */
    @@ -875,6 +884,7 @@ static void __init hx4700_init(void)
    pxa_set_btuart_info(NULL);
    pxa_set_stuart_info(NULL);

    + gpiod_add_lookup_table(&bq24022_gpiod_table);
    platform_add_devices(devices, ARRAY_SIZE(devices));
    pwm_add_table(hx4700_pwm_lookup, ARRAY_SIZE(hx4700_pwm_lookup));

    diff --git a/arch/arm/mach-pxa/magician.c b/arch/arm/mach-pxa/magician.c
    index 14c0f80bc9e7..9a5bda3ea194 100644
    --- a/arch/arm/mach-pxa/magician.c
    +++ b/arch/arm/mach-pxa/magician.c
    @@ -657,7 +657,6 @@ static struct gpio_regulator_state bq24022_states[] = {
    static struct gpio_regulator_config bq24022_info = {
    .supply_name = "bq24022",

    - .enable_gpio = GPIO30_MAGICIAN_BQ24022_nCHARGE_EN,
    .enable_high = 0,
    .enabled_at_boot = 1,

    @@ -679,6 +678,15 @@ static struct platform_device bq24022 = {
    },
    };

    +static struct gpiod_lookup_table bq24022_gpiod_table = {
    + .dev_id = "gpio-regulator",
    + .table = {
    + GPIO_LOOKUP("gpio-pxa", GPIO30_MAGICIAN_BQ24022_nCHARGE_EN,
    + "enable", GPIO_ACTIVE_HIGH),
    + { },
    + },
    +};
    +
    /*
    * fixed regulator for ads7846
    */
    @@ -1007,6 +1015,7 @@ static void __init magician_init(void)
    regulator_register_always_on(0, "power", pwm_backlight_supply,
    ARRAY_SIZE(pwm_backlight_supply), 5000000);

    + gpiod_add_lookup_table(&bq24022_gpiod_table);
    platform_add_devices(ARRAY_AND_SIZE(devices));
    }

    diff --git a/drivers/regulator/gpio-regulator.c b/drivers/regulator/gpio-regulator.c
    index 0fce06acfaec..172ca4c578b2 100644
    --- a/drivers/regulator/gpio-regulator.c
    +++ b/drivers/regulator/gpio-regulator.c
    @@ -31,6 +31,7 @@
    #include <linux/regulator/of_regulator.h>
    #include <linux/regulator/gpio-regulator.h>
    #include <linux/gpio.h>
    +#include <linux/gpio/consumer.h>
    #include <linux/slab.h>
    #include <linux/of.h>
    #include <linux/of_gpio.h>
    @@ -161,10 +162,6 @@ of_get_gpio_regulator_config(struct device *dev, struct device_node *np,

    of_property_read_u32(np, "startup-delay-us", &config->startup_delay);

    - config->enable_gpio = of_get_named_gpio(np, "enable-gpio", 0);
    - if (config->enable_gpio < 0 && config->enable_gpio != -ENOENT)
    - return ERR_PTR(config->enable_gpio);
    -
    /* Fetch GPIOs. - optional property*/
    ret = of_gpio_count(np);
    if ((ret < 0) && (ret != -ENOENT))
    @@ -254,6 +251,7 @@ static int gpio_regulator_probe(struct platform_device *pdev)
    struct device_node *np = pdev->dev.of_node;
    struct gpio_regulator_data *drvdata;
    struct regulator_config cfg = { };
    + enum gpiod_flags gflags;
    int ptr, ret, state;

    drvdata = devm_kzalloc(&pdev->dev, sizeof(struct gpio_regulator_data),
    @@ -340,21 +338,22 @@ static int gpio_regulator_probe(struct platform_device *pdev)
    cfg.driver_data = drvdata;
    cfg.of_node = np;

    - if (gpio_is_valid(config->enable_gpio)) {
    - cfg.ena_gpio = config->enable_gpio;
    - cfg.ena_gpio_initialized = true;
    - }
    cfg.ena_gpio_invert = !config->enable_high;
    if (config->enabled_at_boot) {
    if (config->enable_high)
    - cfg.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH;
    + gflags = GPIOD_OUT_HIGH;
    else
    - cfg.ena_gpio_flags |= GPIOF_OUT_INIT_LOW;
    + gflags = GPIOD_OUT_LOW;
    } else {
    if (config->enable_high)
    - cfg.ena_gpio_flags |= GPIOF_OUT_INIT_LOW;
    + gflags = GPIOD_OUT_LOW;
    else
    - cfg.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH;
    + gflags = GPIOD_OUT_HIGH;
    + }
    + cfg.ena_gpiod = devm_gpiod_get_optional(&pdev->dev, "enable", gflags);
    + if (IS_ERR(cfg.ena_gpiod)) {
    + ret = PTR_ERR(cfg.ena_gpiod);
    + goto err_stategpio;
    }

    drvdata->dev = regulator_register(&drvdata->desc, &cfg);
    diff --git a/include/linux/regulator/gpio-regulator.h b/include/linux/regulator/gpio-regulator.h
    index 19fbd267406d..536cab86f2d5 100644
    --- a/include/linux/regulator/gpio-regulator.h
    +++ b/include/linux/regulator/gpio-regulator.h
    @@ -44,8 +44,6 @@ struct gpio_regulator_state {
    /**
    * struct gpio_regulator_config - config structure
    * @supply_name: Name of the regulator supply
    - * @enable_gpio: GPIO to use for enable control
    - * set to -EINVAL if not used
    * @enable_high: Polarity of enable GPIO
    * 1 = Active high, 0 = Active low
    * @enabled_at_boot: Whether regulator has been enabled at
    @@ -69,7 +67,6 @@ struct gpio_regulator_state {
    struct gpio_regulator_config {
    const char *supply_name;

    - int enable_gpio;
    unsigned enable_high:1;
    unsigned enabled_at_boot:1;
    unsigned startup_delay;
    --
    2.14.3
    \
     
     \ /
      Last update: 2018-02-12 14:22    [W:4.173 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site