OSDN Git Service

pinctrl/nomadik: reuse GPIO debug function for pins
authorLinus Walleij <linus.walleij@linaro.org>
Wed, 2 May 2012 19:28:00 +0000 (21:28 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Fri, 11 May 2012 09:14:15 +0000 (11:14 +0200)
Since all pins we can control are GPIOs, match a GPIO range to
each pin in the debug function and call into the GPIO debug
print function to have the per-pin information.

Acked-by: Stephen Warren <swarren@wwwdotorg.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/pinctrl-nomadik.c

index 8ed7917..7543eb2 100644 (file)
@@ -1326,10 +1326,36 @@ static int nmk_get_group_pins(struct pinctrl_dev *pctldev, unsigned selector,
        return 0;
 }
 
+static struct pinctrl_gpio_range *
+nmk_match_gpio_range(struct pinctrl_dev *pctldev, unsigned offset)
+{
+       struct nmk_pinctrl *npct = pinctrl_dev_get_drvdata(pctldev);
+       int i;
+
+       for (i = 0; i < npct->soc->gpio_num_ranges; i++) {
+               struct pinctrl_gpio_range *range;
+
+               range = &npct->soc->gpio_ranges[i];
+               if (offset >= range->pin_base &&
+                   offset <= (range->pin_base + range->npins - 1))
+                       return range;
+       }
+       return NULL;
+}
+
 static void nmk_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s,
                   unsigned offset)
 {
-       seq_printf(s, " Nomadik GPIO");
+       struct pinctrl_gpio_range *range;
+       struct gpio_chip *chip;
+
+       range = nmk_match_gpio_range(pctldev, offset);
+       if (!range || !range->gc) {
+               seq_printf(s, "invalid pin offset");
+               return;
+       }
+       chip = range->gc;
+       nmk_gpio_dbg_show_one(s, chip, offset - chip->base, offset);
 }
 
 static struct pinctrl_ops nmk_pinctrl_ops = {