aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio/gpiolib-of.c
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2012-11-20 06:40:15 -0500
committerLinus Walleij <linus.walleij@linaro.org>2012-11-21 02:55:03 -0500
commit3f0f8670608766ef26a178d4e80cad3ce030fecc (patch)
treed2f192a4a454bd677983c7eb0b88a0016f128bf6 /drivers/gpio/gpiolib-of.c
parent5212d096cbed2eae1e442b3f8bf448e6a577af6f (diff)
gpiolib: let gpiochip_add_pin_range() specify offset
Like with commit 3c739ad0df5eb41cd7adad879eda6aa09879eb76 it is not always enough to specify all the pins of a gpio_chip from offset zero to be added to a pin map range, since the mapping from GPIO to pin controller may not be linear at all, but need to be broken into a few consecutive sub-ranges or 1-pin entries for complicated cases. The ranges may also be sparse. This alters the signature of the function to accept offsets into both the GPIO-chip local pinspace and the pin controller local pinspace. Reviewed-by: Stephen Warren <swarren@nvidia.com> Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/gpio/gpiolib-of.c')
-rw-r--r--drivers/gpio/gpiolib-of.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c
index a40cd84c5c10..d542a141811a 100644
--- a/drivers/gpio/gpiolib-of.c
+++ b/drivers/gpio/gpiolib-of.c
@@ -238,8 +238,20 @@ static void of_gpiochip_add_pin_range(struct gpio_chip *chip)
238 if (!pctldev) 238 if (!pctldev)
239 break; 239 break;
240 240
241 /*
242 * This assumes that the n GPIO pins are consecutive in the
243 * GPIO number space, and that the pins are also consecutive
244 * in their local number space. Currently it is not possible
245 * to add different ranges for one and the same GPIO chip,
246 * as the code assumes that we have one consecutive range
247 * on both, mapping 1-to-1.
248 *
249 * TODO: make the OF bindings handle multiple sparse ranges
250 * on the same GPIO chip.
251 */
241 ret = gpiochip_add_pin_range(chip, 252 ret = gpiochip_add_pin_range(chip,
242 pinctrl_dev_get_name(pctldev), 253 pinctrl_dev_get_name(pctldev),
254 0, /* offset in gpiochip */
243 pinspec.args[0], 255 pinspec.args[0],
244 pinspec.args[1]); 256 pinspec.args[1]);
245 257