pinctrl: stm32: improve debugfs information of pinconf-pins entry
authorFabien Dessenne <fabien.dessenne@foss.st.com>
Mon, 2 May 2022 15:25:24 +0000 (17:25 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 4 May 2022 22:02:48 +0000 (00:02 +0200)
Print the name of the selected alternate function in addition to its
number. Ex:
   "pin 135 (PI7): alternate 10 (SAI2_FS_A) - ..."

Signed-off-by: Fabien Dessenne <fabien.dessenne@foss.st.com>
Signed-off-by: Alexandre Torgue <alexandre.torgue@foss.st.com>
Link: https://lore.kernel.org/r/20220502152524.283374-1-fabien.dessenne@foss.st.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/stm32/pinctrl-stm32.c
drivers/pinctrl/stm32/pinctrl-stm32.h

index aef1cda4934d2ae433ce618fed257da91cc4a34e..1e0802923cbda660b5a32784c3e22071da85902c 100644 (file)
@@ -508,7 +508,7 @@ stm32_pctrl_find_group_by_pin(struct stm32_pinctrl *pctl, u32 pin)
 static bool stm32_pctrl_is_function_valid(struct stm32_pinctrl *pctl,
                u32 pin_num, u32 fnum)
 {
-       int i;
+       int i, k;
 
        for (i = 0; i < pctl->npins; i++) {
                const struct stm32_desc_pin *pin = pctl->pins + i;
@@ -517,7 +517,7 @@ static bool stm32_pctrl_is_function_valid(struct stm32_pinctrl *pctl,
                if (pin->pin.number != pin_num)
                        continue;
 
-               while (func && func->name) {
+               for (k = 0; k < STM32_CONFIG_NUM; k++) {
                        if (func->num == fnum)
                                return true;
                        func++;
@@ -1119,10 +1119,27 @@ static int stm32_pconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
        return 0;
 }
 
+static struct stm32_desc_pin *
+stm32_pconf_get_pin_desc_by_pin_number(struct stm32_pinctrl *pctl,
+                                      unsigned int pin_number)
+{
+       struct stm32_desc_pin *pins = pctl->pins;
+       int i;
+
+       for (i = 0; i < pctl->npins; i++) {
+               if (pins->pin.number == pin_number)
+                       return pins;
+               pins++;
+       }
+       return NULL;
+}
+
 static void stm32_pconf_dbg_show(struct pinctrl_dev *pctldev,
                                 struct seq_file *s,
                                 unsigned int pin)
 {
+       struct stm32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
+       const struct stm32_desc_pin *pin_desc;
        struct pinctrl_gpio_range *range;
        struct stm32_gpio_bank *bank;
        int offset;
@@ -1172,7 +1189,12 @@ static void stm32_pconf_dbg_show(struct pinctrl_dev *pctldev,
        case 2:
                drive = stm32_pconf_get_driving(bank, offset);
                speed = stm32_pconf_get_speed(bank, offset);
-               seq_printf(s, "%d - %s - %s - %s %s", alt,
+               pin_desc = stm32_pconf_get_pin_desc_by_pin_number(pctl, pin);
+               if (!pin_desc)
+                       return;
+
+               seq_printf(s, "%d (%s) - %s - %s - %s %s", alt,
+                          pin_desc->functions[alt + 1].name,
                           drive ? "open drain" : "push pull",
                           biasing[bias],
                           speeds[speed], "speed");
@@ -1386,7 +1408,8 @@ static int stm32_pctrl_create_pins_tab(struct stm32_pinctrl *pctl,
                if (pctl->pkg && !(pctl->pkg & p->pkg))
                        continue;
                pins->pin = p->pin;
-               pins->functions = p->functions;
+               memcpy((struct stm32_desc_pin *)pins->functions, p->functions,
+                      STM32_CONFIG_NUM * sizeof(struct stm32_desc_function));
                pins++;
                nb_pins_available++;
        }
index b9584039cdf5faca016664ff0978678c63aa04d4..2ac2db41a498b0edc25646647936a65a57d5c553 100644 (file)
@@ -17,6 +17,7 @@
 #define STM32_PIN_GPIO         0
 #define STM32_PIN_AF(x)                ((x) + 1)
 #define STM32_PIN_ANALOG       (STM32_PIN_AF(15) + 1)
+#define STM32_CONFIG_NUM       (STM32_PIN_ANALOG + 1)
 
 /*  package information */
 #define STM32MP_PKG_AA         BIT(0)
@@ -31,26 +32,26 @@ struct stm32_desc_function {
 
 struct stm32_desc_pin {
        struct pinctrl_pin_desc pin;
-       const struct stm32_desc_function *functions;
+       const struct stm32_desc_function functions[STM32_CONFIG_NUM];
        const unsigned int pkg;
 };
 
 #define STM32_PIN(_pin, ...)                                   \
        {                                                       \
                .pin = _pin,                                    \
-               .functions = (struct stm32_desc_function[]){    \
-                       __VA_ARGS__, { } },                     \
+               .functions = {  \
+                       __VA_ARGS__},                   \
        }
 
 #define STM32_PIN_PKG(_pin, _pkg, ...)                                 \
        {                                                       \
                .pin = _pin,                                    \
                .pkg  = _pkg,                           \
-               .functions = (struct stm32_desc_function[]){    \
-                       __VA_ARGS__, { } },                     \
+               .functions = {  \
+                       __VA_ARGS__},                   \
        }
 #define STM32_FUNCTION(_num, _name)            \
-       {                                                       \
+       [_num] = {                                              \
                .num = _num,                                    \
                .name = _name,                                  \
        }