Thread (5 messages) 5 messages, 3 authors, 2023-08-10

Re: [PATCH] pinctrl: stm32: set default gpio line names using pin names

From: Valentin CARON <hidden>
Date: 2023-08-03 13:26:42
Also in: linux-gpio, lkml

Hi Linus,

Is the Acked-by from Alexandre enough ?

He is maintainer of arm/stm32 architecture.

Thanks,
Valentin

On 6/21/23 10:18, Alexandre TORGUE wrote:
Hi

On 6/20/23 12:43, Valentin Caron wrote:
quoted
Add stm32_pctrl_get_desc_pin_from_gpio function to find a stm32 pin
descriptor which is matching with a gpio.
Most of the time pin number is equal to pin index in array. So the first
part of the function is useful to speed up.

And during gpio bank register, we set default gpio names with pin names.

Signed-off-by: Valentin Caron <redacted>
---
Acked-by: Alexandre TORGUE <alexandre.torgue@foss.st.com>
quoted
  drivers/pinctrl/stm32/pinctrl-stm32.c | 35 +++++++++++++++++++++++++++
  1 file changed, 35 insertions(+)
diff --git a/drivers/pinctrl/stm32/pinctrl-stm32.c 
b/drivers/pinctrl/stm32/pinctrl-stm32.c
index 4b97bd00191b..eedbb9b97a65 100644
--- a/drivers/pinctrl/stm32/pinctrl-stm32.c
+++ b/drivers/pinctrl/stm32/pinctrl-stm32.c
@@ -1275,6 +1275,28 @@ static const struct pinconf_ops 
stm32_pconf_ops = {
      .pin_config_dbg_show    = stm32_pconf_dbg_show,
  };
  +static struct stm32_desc_pin 
*stm32_pctrl_get_desc_pin_from_gpio(struct stm32_pinctrl *pctl,
+                                 struct stm32_gpio_bank *bank,
+                                 unsigned int offset)
+{
+    unsigned int stm32_pin_nb = bank->bank_nr * 
STM32_GPIO_PINS_PER_BANK + offset;
+    struct stm32_desc_pin *pin_desc;
+    int i;
+
+    /* With few exceptions (e.g. bank 'Z'), pin number matches with 
pin index in array */
+    pin_desc = pctl->pins + stm32_pin_nb;
+    if (pin_desc->pin.number == stm32_pin_nb)
+        return pin_desc;
+
+    /* Otherwise, loop all array to find the pin with the right 
number */
+    for (i = 0; i < pctl->npins; i++) {
+        pin_desc = pctl->pins + i;
+        if (pin_desc->pin.number == stm32_pin_nb)
+            return pin_desc;
+    }
+    return NULL;
+}
+
  static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl, 
struct fwnode_handle *fwnode)
  {
      struct stm32_gpio_bank *bank = &pctl->banks[pctl->nbanks];
@@ -1285,6 +1307,8 @@ static int stm32_gpiolib_register_bank(struct 
stm32_pinctrl *pctl, struct fwnode
      struct resource res;
      int npins = STM32_GPIO_PINS_PER_BANK;
      int bank_nr, err, i = 0;
+    struct stm32_desc_pin *stm32_pin;
+    char **names;
        if (!IS_ERR(bank->rstc))
          reset_control_deassert(bank->rstc);
@@ -1354,6 +1378,17 @@ static int stm32_gpiolib_register_bank(struct 
stm32_pinctrl *pctl, struct fwnode
          }
      }
  +    names = devm_kcalloc(dev, npins, sizeof(char *), GFP_KERNEL);
+    for (i = 0; i < npins; i++) {
+        stm32_pin = stm32_pctrl_get_desc_pin_from_gpio(pctl, bank, i);
+        if (stm32_pin && stm32_pin->pin.name)
+            names[i] = devm_kasprintf(dev, GFP_KERNEL, "%s", 
stm32_pin->pin.name);
+        else
+            names[i] = NULL;
+    }
+
+    bank->gpio_chip.names = (const char * const *)names;
+
      err = gpiochip_add_data(&bank->gpio_chip, bank);
      if (err) {
          dev_err(dev, "Failed to add gpiochip(%d)!\n", bank_nr);
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help