diff options
author | Maxime Ripard <maxime.ripard@free-electrons.com> | 2013-02-03 06:10:11 -0500 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2013-02-05 11:32:29 -0500 |
commit | a0d72094f0abad3cbeeed618d24fd0ce1968d1a8 (patch) | |
tree | fea531dff6651259dcf4f65a4b809517d841fd44 /drivers/pinctrl | |
parent | 581981be24f9866b37af535f947da2e7b65aaa53 (diff) |
pinctrl: sunxi: add of_xlate function
Since the pin controller of sunxi chips is represented as a
single bank in the driver.
Since this is neither convenient nor represented that way in the
datasheets, define a custom of_xlate function with the layout
<bank pin flag>
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/pinctrl')
-rw-r--r-- | drivers/pinctrl/pinctrl-sunxi.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/pinctrl/pinctrl-sunxi.c b/drivers/pinctrl/pinctrl-sunxi.c index e4d32c67dcbb..80b11e3415bc 100644 --- a/drivers/pinctrl/pinctrl-sunxi.c +++ b/drivers/pinctrl/pinctrl-sunxi.c | |||
@@ -1261,6 +1261,24 @@ static void sunxi_pinctrl_gpio_set(struct gpio_chip *chip, | |||
1261 | writel((value & DATA_PINS_MASK) << index, pctl->membase + reg); | 1261 | writel((value & DATA_PINS_MASK) << index, pctl->membase + reg); |
1262 | } | 1262 | } |
1263 | 1263 | ||
1264 | static int sunxi_pinctrl_gpio_of_xlate(struct gpio_chip *gc, | ||
1265 | const struct of_phandle_args *gpiospec, | ||
1266 | u32 *flags) | ||
1267 | { | ||
1268 | int pin, base; | ||
1269 | |||
1270 | base = PINS_PER_BANK * gpiospec->args[0]; | ||
1271 | pin = base + gpiospec->args[1]; | ||
1272 | |||
1273 | if (pin > (gc->base + gc->ngpio)) | ||
1274 | return -EINVAL; | ||
1275 | |||
1276 | if (flags) | ||
1277 | *flags = gpiospec->args[2]; | ||
1278 | |||
1279 | return pin; | ||
1280 | } | ||
1281 | |||
1264 | static struct gpio_chip sunxi_pinctrl_gpio_chip = { | 1282 | static struct gpio_chip sunxi_pinctrl_gpio_chip = { |
1265 | .owner = THIS_MODULE, | 1283 | .owner = THIS_MODULE, |
1266 | .request = sunxi_pinctrl_gpio_request, | 1284 | .request = sunxi_pinctrl_gpio_request, |
@@ -1269,6 +1287,8 @@ static struct gpio_chip sunxi_pinctrl_gpio_chip = { | |||
1269 | .direction_output = sunxi_pinctrl_gpio_direction_output, | 1287 | .direction_output = sunxi_pinctrl_gpio_direction_output, |
1270 | .get = sunxi_pinctrl_gpio_get, | 1288 | .get = sunxi_pinctrl_gpio_get, |
1271 | .set = sunxi_pinctrl_gpio_set, | 1289 | .set = sunxi_pinctrl_gpio_set, |
1290 | .of_xlate = sunxi_pinctrl_gpio_of_xlate, | ||
1291 | .of_gpio_n_cells = 3, | ||
1272 | .can_sleep = 0, | 1292 | .can_sleep = 0, |
1273 | }; | 1293 | }; |
1274 | 1294 | ||