mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-06 10:57:46 +00:00
pinctrl/nomadik: debugfs display of other alternate-C functions
In pinctrl debug pins file, enable display of AltCx functions. Signed-off-by: Jean-Nicolas Graux <jean-nicolas.graux@stericsson.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
d3cd8d0caa
commit
2249b19f37
1 changed files with 41 additions and 4 deletions
|
@ -671,6 +671,35 @@ int nmk_gpio_set_mode(int gpio, int gpio_mode)
|
|||
}
|
||||
EXPORT_SYMBOL(nmk_gpio_set_mode);
|
||||
|
||||
static int nmk_prcm_gpiocr_get_mode(struct pinctrl_dev *pctldev, int gpio)
|
||||
{
|
||||
int i;
|
||||
u16 reg;
|
||||
u8 bit;
|
||||
struct nmk_pinctrl *npct = pinctrl_dev_get_drvdata(pctldev);
|
||||
const struct prcm_gpiocr_altcx_pin_desc *pin_desc;
|
||||
const u16 *gpiocr_regs;
|
||||
|
||||
for (i = 0; i < npct->soc->npins_altcx; i++) {
|
||||
if (npct->soc->altcx_pins[i].pin == gpio)
|
||||
break;
|
||||
}
|
||||
if (i == npct->soc->npins_altcx)
|
||||
return NMK_GPIO_ALT_C;
|
||||
|
||||
pin_desc = npct->soc->altcx_pins + i;
|
||||
gpiocr_regs = npct->soc->prcm_gpiocr_registers;
|
||||
for (i = 0; i < PRCM_IDX_GPIOCR_ALTC_MAX; i++) {
|
||||
if (pin_desc->altcx[i].used == true) {
|
||||
reg = gpiocr_regs[pin_desc->altcx[i].reg_index];
|
||||
bit = pin_desc->altcx[i].control_bit;
|
||||
if (prcmu_read(reg) & BIT(bit))
|
||||
return NMK_GPIO_ALT_C+i+1;
|
||||
}
|
||||
}
|
||||
return NMK_GPIO_ALT_C;
|
||||
}
|
||||
|
||||
int nmk_gpio_get_mode(int gpio)
|
||||
{
|
||||
struct nmk_gpio_chip *nmk_chip;
|
||||
|
@ -1059,8 +1088,9 @@ static int nmk_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
|
|||
|
||||
#include <linux/seq_file.h>
|
||||
|
||||
static void nmk_gpio_dbg_show_one(struct seq_file *s, struct gpio_chip *chip,
|
||||
unsigned offset, unsigned gpio)
|
||||
static void nmk_gpio_dbg_show_one(struct seq_file *s,
|
||||
struct pinctrl_dev *pctldev, struct gpio_chip *chip,
|
||||
unsigned offset, unsigned gpio)
|
||||
{
|
||||
const char *label = gpiochip_is_requested(chip, offset);
|
||||
struct nmk_gpio_chip *nmk_chip =
|
||||
|
@ -1074,12 +1104,18 @@ static void nmk_gpio_dbg_show_one(struct seq_file *s, struct gpio_chip *chip,
|
|||
[NMK_GPIO_ALT_A] = "altA",
|
||||
[NMK_GPIO_ALT_B] = "altB",
|
||||
[NMK_GPIO_ALT_C] = "altC",
|
||||
[NMK_GPIO_ALT_C+1] = "altC1",
|
||||
[NMK_GPIO_ALT_C+2] = "altC2",
|
||||
[NMK_GPIO_ALT_C+3] = "altC3",
|
||||
[NMK_GPIO_ALT_C+4] = "altC4",
|
||||
};
|
||||
|
||||
clk_enable(nmk_chip->clk);
|
||||
is_out = !!(readl(nmk_chip->addr + NMK_GPIO_DIR) & bit);
|
||||
pull = !(readl(nmk_chip->addr + NMK_GPIO_PDIS) & bit);
|
||||
mode = nmk_gpio_get_mode(gpio);
|
||||
if ((mode == NMK_GPIO_ALT_C) && pctldev)
|
||||
mode = nmk_prcm_gpiocr_get_mode(pctldev, gpio);
|
||||
|
||||
seq_printf(s, " gpio-%-3d (%-20.20s) %s %s %s %s",
|
||||
gpio, label ?: "(none)",
|
||||
|
@ -1123,13 +1159,14 @@ static void nmk_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
|
|||
unsigned gpio = chip->base;
|
||||
|
||||
for (i = 0; i < chip->ngpio; i++, gpio++) {
|
||||
nmk_gpio_dbg_show_one(s, chip, i, gpio);
|
||||
nmk_gpio_dbg_show_one(s, NULL, chip, i, gpio);
|
||||
seq_printf(s, "\n");
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
static inline void nmk_gpio_dbg_show_one(struct seq_file *s,
|
||||
struct pinctrl_dev *pctldev,
|
||||
struct gpio_chip *chip,
|
||||
unsigned offset, unsigned gpio)
|
||||
{
|
||||
|
@ -1460,7 +1497,7 @@ static void nmk_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s,
|
|||
return;
|
||||
}
|
||||
chip = range->gc;
|
||||
nmk_gpio_dbg_show_one(s, chip, offset - chip->base, offset);
|
||||
nmk_gpio_dbg_show_one(s, pctldev, chip, offset - chip->base, offset);
|
||||
}
|
||||
|
||||
static struct pinctrl_ops nmk_pinctrl_ops = {
|
||||
|
|
Loading…
Reference in a new issue