Re: [PATCH v4] regulator: Add GPIO enable control to fixed voltageregulator driver

From: Liam Girdwood
Date: Mon Aug 03 2009 - 15:56:21 EST


On Mon, 2009-08-03 at 20:15 +0300, Roger Quadros wrote:
> From: Roger Quadros <ext-roger.quadros@xxxxxxxxx>
>
> Now fixed regulators that have their enable pin connected to a GPIO line
> can use the fixed regulator driver for regulator enable/disable control.
> The GPIO number and polarity information is passed through platform data.
> GPIO enable control is achieved using gpiolib.
>
> Signed-off-by: Roger Quadros <ext-roger.quadros@xxxxxxxxx>
> ---
> drivers/regulator/fixed.c | 78 ++++++++++++++++++++++++++++++++++++++-
> include/linux/regulator/fixed.h | 21 ++++++++++
> 2 files changed, 97 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/regulator/fixed.c b/drivers/regulator/fixed.c
> index cdc674f..6cea02c 100644
> --- a/drivers/regulator/fixed.c
> +++ b/drivers/regulator/fixed.c
> @@ -5,6 +5,9 @@
> *
> * Author: Mark Brown <broonie@xxxxxxxxxxxxxxxxxxxxxxxxxxx>
> *
> + * Copyright (c) 2009 Nokia Corporation
> + * Roger Quadros <ext-roger.quadros@xxxxxxxxx>
> + *
> * This program is free software; you can redistribute it and/or
> * modify it under the terms of the GNU General Public License as
> * published by the Free Software Foundation; either version 2 of the
> @@ -20,20 +23,45 @@
> #include <linux/platform_device.h>
> #include <linux/regulator/driver.h>
> #include <linux/regulator/fixed.h>
> +#include <linux/gpio.h>
>
> struct fixed_voltage_data {
> struct regulator_desc desc;
> struct regulator_dev *dev;
> int microvolts;
> + int gpio;
> + unsigned enable_high:1;
> + unsigned is_enabled:1;
> };
>
> static int fixed_voltage_is_enabled(struct regulator_dev *dev)
> {
> - return 1;
> + struct fixed_voltage_data *data = rdev_get_drvdata(dev);
> +
> + return data->is_enabled;
> }
>
> static int fixed_voltage_enable(struct regulator_dev *dev)
> {
> + struct fixed_voltage_data *data = rdev_get_drvdata(dev);
> +
> + if (gpio_is_valid(data->gpio)) {
> + gpio_set_value_cansleep(data->gpio, data->enable_high);
> + data->is_enabled = 1;
> + }
> +
> + return 0;
> +}
> +
> +static int fixed_voltage_disable(struct regulator_dev *dev)
> +{
> + struct fixed_voltage_data *data = rdev_get_drvdata(dev);
> +
> + if (gpio_is_valid(data->gpio)) {
> + gpio_set_value_cansleep(data->gpio, !data->enable_high);
> + data->is_enabled = 0;
> + }
> +
> return 0;
> }
>
> @@ -58,6 +86,7 @@ static int fixed_voltage_list_voltage(struct regulator_dev *dev,
> static struct regulator_ops fixed_voltage_ops = {
> .is_enabled = fixed_voltage_is_enabled,
> .enable = fixed_voltage_enable,
> + .disable = fixed_voltage_disable,
> .get_voltage = fixed_voltage_get_voltage,
> .list_voltage = fixed_voltage_list_voltage,
> };
> @@ -85,12 +114,51 @@ static int regulator_fixed_voltage_probe(struct platform_device *pdev)
> drvdata->desc.n_voltages = 1;
>
> drvdata->microvolts = config->microvolts;
> + drvdata->gpio = config->gpio;
> +
> + if (gpio_is_valid(config->gpio)) {
> + drvdata->enable_high = config->enable_high;
> +
> + /* FIXME: Remove this print warning */

Sorry to nitpick. Please describe the reason for this warning in the
comment and when it will likely be removed. Obvious from email thread
but not by someone looking at code.

Thanks

Liam

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/