pinctrl: baytrail: Add pull type, strength and open drain to debugfs output
authorMika Westerberg <mika.westerberg@linux.intel.com>
Fri, 16 May 2014 09:18:29 +0000 (12:18 +0300)
committerLinus Walleij <linus.walleij@linaro.org>
Thu, 22 May 2014 22:01:54 +0000 (00:01 +0200)
In case of resolving power management or similar issues it might be useful
to have these properties included in the debugfs output.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Acked-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/pinctrl-baytrail.c

index 7c65c9dab215cf59923e38f3c862e6a6d4e24a8f..975572e2f260442a4ecd7baf54728664ca81e0f0 100644 (file)
 #define BYT_INT_STAT_REG       0x800
 
 /* BYT_CONF0_REG register bits */
+#define BYT_IODEN              BIT(31)
 #define BYT_TRIG_NEG           BIT(26)
 #define BYT_TRIG_POS           BIT(25)
 #define BYT_TRIG_LVL           BIT(24)
+#define BYT_PULL_STR_SHIFT     9
+#define BYT_PULL_STR_MASK      (3 << BYT_PULL_STR_SHIFT)
+#define BYT_PULL_STR_2K                (0 << BYT_PULL_STR_SHIFT)
+#define BYT_PULL_STR_10K       (1 << BYT_PULL_STR_SHIFT)
+#define BYT_PULL_STR_20K       (2 << BYT_PULL_STR_SHIFT)
+#define BYT_PULL_STR_40K       (3 << BYT_PULL_STR_SHIFT)
+#define BYT_PULL_ASSIGN_SHIFT  7
+#define BYT_PULL_ASSIGN_MASK   (3 << BYT_PULL_ASSIGN_SHIFT)
+#define BYT_PULL_ASSIGN_UP     (1 << BYT_PULL_ASSIGN_SHIFT)
+#define BYT_PULL_ASSIGN_DOWN   (2 << BYT_PULL_ASSIGN_SHIFT)
 #define BYT_PIN_MUX            0x07
 
 /* BYT_VAL_REG register bits */
@@ -321,6 +332,8 @@ static void byt_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
        spin_lock_irqsave(&vg->lock, flags);
 
        for (i = 0; i < vg->chip.ngpio; i++) {
+               const char *pull_str = NULL;
+               const char *pull = NULL;
                const char *label;
                offs = vg->range->pins[i] * 16;
                conf0 = readl(vg->reg_base + offs + BYT_CONF0_REG);
@@ -330,8 +343,32 @@ static void byt_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
                if (!label)
                        label = "Unrequested";
 
+               switch (conf0 & BYT_PULL_ASSIGN_MASK) {
+               case BYT_PULL_ASSIGN_UP:
+                       pull = "up";
+                       break;
+               case BYT_PULL_ASSIGN_DOWN:
+                       pull = "down";
+                       break;
+               }
+
+               switch (conf0 & BYT_PULL_STR_MASK) {
+               case BYT_PULL_STR_2K:
+                       pull_str = "2k";
+                       break;
+               case BYT_PULL_STR_10K:
+                       pull_str = "10k";
+                       break;
+               case BYT_PULL_STR_20K:
+                       pull_str = "20k";
+                       break;
+               case BYT_PULL_STR_40K:
+                       pull_str = "40k";
+                       break;
+               }
+
                seq_printf(s,
-                          " gpio-%-3d (%-20.20s) %s %s %s pad-%-3d offset:0x%03x mux:%d %s%s%s\n",
+                          " gpio-%-3d (%-20.20s) %s %s %s pad-%-3d offset:0x%03x mux:%d %s%s%s",
                           i,
                           label,
                           val & BYT_INPUT_EN ? "  " : "in",
@@ -339,9 +376,19 @@ static void byt_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
                           val & BYT_LEVEL ? "hi" : "lo",
                           vg->range->pins[i], offs,
                           conf0 & 0x7,
-                          conf0 & BYT_TRIG_NEG ? " fall" : "",
-                          conf0 & BYT_TRIG_POS ? " rise" : "",
-                          conf0 & BYT_TRIG_LVL ? " level" : "");
+                          conf0 & BYT_TRIG_NEG ? " fall" : "     ",
+                          conf0 & BYT_TRIG_POS ? " rise" : "     ",
+                          conf0 & BYT_TRIG_LVL ? " level" : "      ");
+
+               if (pull && pull_str)
+                       seq_printf(s, " %-4s %-3s", pull, pull_str);
+               else
+                       seq_puts(s, "          ");
+
+               if (conf0 & BYT_IODEN)
+                       seq_puts(s, " open-drain");
+
+               seq_puts(s, "\n");
        }
        spin_unlock_irqrestore(&vg->lock, flags);
 }