diff options
author | Linus Walleij <linus.walleij@linaro.org> | 2012-11-20 06:40:15 -0500 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2012-11-21 02:55:03 -0500 |
commit | 3f0f8670608766ef26a178d4e80cad3ce030fecc (patch) | |
tree | d2f192a4a454bd677983c7eb0b88a0016f128bf6 /drivers/gpio/gpiolib-of.c | |
parent | 5212d096cbed2eae1e442b3f8bf448e6a577af6f (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.c | 12 |
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 | ||