diff options
author | Luis R. Rodriguez <mcgrof@do-not-panic.com> | 2013-05-13 03:24:33 -0700 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-05-14 22:55:47 +0200 |
commit | 3a4c9df7558beb6ca19e461c9f9945ea27d23516 (patch) | |
tree | 254872de306747506d0a6694522234c7afa941a6 | |
parent | 0ad93aa9862aa01b7bca917b72c8838abbe8a982 (diff) |
backports: add support for regulator_map_voltage_ascend()
This is required by some drivers as of next-20130424.
commit fcf371ee5624cc87abac205cd0dad2432d7f0346
Author: Axel Lin <axel.lin@ingics.com>
Date: Thu Apr 18 10:34:49 2013 +0800
regulator: core: Add regulator_map_voltage_ascend() API
A lot of regulator hardware has ascendant voltage list.
This patch adds regulator_map_voltage_ascend() and export it.
Drivers that have ascendant voltage list can use this as their map_voltage()
operation, this is more efficient than default regulator_map_voltage_iterate()
function.
Signed-off-by: Axel Lin <axel.lin@ingics.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Luis R. Rodriguez <mcgrof@do-not-panic.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r-- | backport/backport-include/linux/regulator/driver.h | 26 | ||||
-rw-r--r-- | backport/compat/Makefile | 1 | ||||
-rw-r--r-- | backport/compat/backport-3.10.c | 62 |
3 files changed, 89 insertions, 0 deletions
diff --git a/backport/backport-include/linux/regulator/driver.h b/backport/backport-include/linux/regulator/driver.h new file mode 100644 index 00000000..fbd98459 --- /dev/null +++ b/backport/backport-include/linux/regulator/driver.h @@ -0,0 +1,26 @@ +/* + * driver.h -- SoC Regulator driver support. + * + * Copyright (C) 2007, 2008 Wolfson Microelectronics PLC. + * + * Author: Liam Girdwood <lrg@slimlogic.co.uk> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Regulator Driver Interface. + */ + +#ifndef __BACKPORT_LINUX_REGULATOR_DRIVER_H_ +#define __BACKPORT_LINUX_REGULATOR_DRIVER_H_ + +#include <linux/version.h> +#include_next <linux/regulator/driver.h> + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) +int regulator_map_voltage_ascend(struct regulator_dev *rdev, + int min_uV, int max_uV); +#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) */ + +#endif /* __BACKPORT_LINUX_REGULATOR_DRIVER_H_ */ diff --git a/backport/compat/Makefile b/backport/compat/Makefile index 2ab3169a..18df1561 100644 --- a/backport/compat/Makefile +++ b/backport/compat/Makefile @@ -34,6 +34,7 @@ compat-$(CPTCFG_BACKPORT_KERNEL_3_6) += compat-3.6.o compat-$(CPTCFG_BACKPORT_KERNEL_3_7) += compat-3.7.o compat-$(CPTCFG_BACKPORT_KERNEL_3_8) += compat-3.8.o compat-$(CPTCFG_BACKPORT_KERNEL_3_9) += compat-3.9.o +compat-$(CPTCFG_BACKPORT_KERNEL_3_10) += backport-3.10.o compat-$(CPTCFG_BACKPORT_BUILD_KFIFO) += kfifo.o compat-$(CPTCFG_BACKPORT_BUILD_GENERIC_ATOMIC64) += compat_atomic.o diff --git a/backport/compat/backport-3.10.c b/backport/compat/backport-3.10.c new file mode 100644 index 00000000..69c3788c --- /dev/null +++ b/backport/compat/backport-3.10.c @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2013 Luis R. Rodriguez <mcgrof@do-not-panic.com> + * + * Linux backport symbols for kernels 3.10. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/debugfs.h> +#include <linux/device.h> +#include <linux/slab.h> +#include <linux/async.h> +#include <linux/err.h> +#include <linux/mutex.h> +#include <linux/suspend.h> +#include <linux/delay.h> +#include <linux/gpio.h> +#include <linux/of.h> +#include <linux/regmap.h> +#include <linux/regulator/of_regulator.h> +#include <linux/regulator/consumer.h> +#include <linux/regulator/driver.h> +#include <linux/regulator/machine.h> +#include <linux/module.h> + +/** + * regulator_map_voltage_ascend - map_voltage() for ascendant voltage list + * + * @rdev: Regulator to operate on + * @min_uV: Lower bound for voltage + * @max_uV: Upper bound for voltage + * + * Drivers that have ascendant voltage list can use this as their + * map_voltage() operation. + */ +int regulator_map_voltage_ascend(struct regulator_dev *rdev, + int min_uV, int max_uV) +{ + int i, ret; + + for (i = 0; i < rdev->desc->n_voltages; i++) { + ret = rdev->desc->ops->list_voltage(rdev, i); + if (ret < 0) + continue; + + if (ret > max_uV) + break; + + if (ret >= min_uV && ret <= max_uV) + return i; + } + + return -EINVAL; +} +EXPORT_SYMBOL_GPL(regulator_map_voltage_ascend); + +#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) */ |