Re: [PATCH 2/4] pinctrl: exynos: add support for multiple pin banks

2021-10-31 Thread Tom Rini
On Sun, Oct 17, 2021 at 01:45:40PM +0300, Dzmitry Sankouski wrote:

> Iterate all pin banks to find a pin
> 
> Signed-off-by: Dzmitry Sankouski 
> Cc: Minkyu Kang 

Applied to u-boot/master, thanks!

-- 
Tom


signature.asc
Description: PGP signature


[PATCH 2/4] pinctrl: exynos: add support for multiple pin banks

2021-10-17 Thread Dzmitry Sankouski
Iterate all pin banks to find a pin

Signed-off-by: Dzmitry Sankouski 
Cc: Minkyu Kang 
---
 drivers/pinctrl/exynos/pinctrl-exynos.c | 28 +++--
 1 file changed, 22 insertions(+), 6 deletions(-)

diff --git a/drivers/pinctrl/exynos/pinctrl-exynos.c 
b/drivers/pinctrl/exynos/pinctrl-exynos.c
index 2640c8fcef..898185479b 100644
--- a/drivers/pinctrl/exynos/pinctrl-exynos.c
+++ b/drivers/pinctrl/exynos/pinctrl-exynos.c
@@ -5,6 +5,7 @@
  * Thomas Abraham 
  */
 
+#include 
 #include 
 #include 
 #include 
@@ -38,9 +39,9 @@ static unsigned long pin_to_bank_base(struct udevice *dev, 
const char *pin_name,
u32 *pin)
 {
struct exynos_pinctrl_priv *priv = dev_get_priv(dev);
-   const struct samsung_pin_ctrl *pin_ctrl = priv->pin_ctrl;
-   const struct samsung_pin_bank_data *bank_data = pin_ctrl->pin_banks;
-   u32 nr_banks = pin_ctrl->nr_banks, idx = 0;
+   const struct samsung_pin_ctrl *pin_ctrl_array = priv->pin_ctrl;
+   const struct samsung_pin_bank_data *bank_data;
+   u32 nr_banks, pin_ctrl_idx = 0, idx = 0, bank_base;
char bank[10];
 
/*
@@ -55,11 +56,26 @@ static unsigned long pin_to_bank_base(struct udevice *dev, 
const char *pin_name,
*pin = pin_name[++idx] - '0';
 
/* lookup the pin bank data using the pin bank name */
-   for (idx = 0; idx < nr_banks; idx++)
-   if (!strcmp(bank, bank_data[idx].name))
+   while (true) {
+   const struct samsung_pin_ctrl *pin_ctrl = 
_ctrl_array[pin_ctrl_idx];
+
+   nr_banks = pin_ctrl->nr_banks;
+   if (!nr_banks)
break;
 
-   return priv->base + bank_data[idx].offset;
+   bank_data = pin_ctrl->pin_banks;
+   for (idx = 0; idx < nr_banks; idx++) {
+   debug("pinctrl[%d] bank_data[%d] name is: %s\n",
+   pin_ctrl_idx, idx, bank_data[idx].name);
+   if (!strcmp(bank, bank_data[idx].name)) {
+   bank_base = priv->base + bank_data[idx].offset;
+   break;
+   }
+   }
+   pin_ctrl_idx++;
+   }
+
+   return bank_base;
 }
 
 /**
-- 
2.20.1



[PATCH 2/4] pinctrl: exynos: add support for multiple pin banks

2021-10-12 Thread Dzmitry Sankouski
Iterate all pin banks to find a pin

Signed-off-by: Dzmitry Sankouski 
Cc: Minkyu Kang 
---
 drivers/pinctrl/exynos/pinctrl-exynos.c | 28 +++--
 1 file changed, 22 insertions(+), 6 deletions(-)

diff --git a/drivers/pinctrl/exynos/pinctrl-exynos.c 
b/drivers/pinctrl/exynos/pinctrl-exynos.c
index 2640c8fcef..898185479b 100644
--- a/drivers/pinctrl/exynos/pinctrl-exynos.c
+++ b/drivers/pinctrl/exynos/pinctrl-exynos.c
@@ -5,6 +5,7 @@
  * Thomas Abraham 
  */
 
+#include 
 #include 
 #include 
 #include 
@@ -38,9 +39,9 @@ static unsigned long pin_to_bank_base(struct udevice *dev, 
const char *pin_name,
u32 *pin)
 {
struct exynos_pinctrl_priv *priv = dev_get_priv(dev);
-   const struct samsung_pin_ctrl *pin_ctrl = priv->pin_ctrl;
-   const struct samsung_pin_bank_data *bank_data = pin_ctrl->pin_banks;
-   u32 nr_banks = pin_ctrl->nr_banks, idx = 0;
+   const struct samsung_pin_ctrl *pin_ctrl_array = priv->pin_ctrl;
+   const struct samsung_pin_bank_data *bank_data;
+   u32 nr_banks, pin_ctrl_idx = 0, idx = 0, bank_base;
char bank[10];
 
/*
@@ -55,11 +56,26 @@ static unsigned long pin_to_bank_base(struct udevice *dev, 
const char *pin_name,
*pin = pin_name[++idx] - '0';
 
/* lookup the pin bank data using the pin bank name */
-   for (idx = 0; idx < nr_banks; idx++)
-   if (!strcmp(bank, bank_data[idx].name))
+   while (true) {
+   const struct samsung_pin_ctrl *pin_ctrl = 
_ctrl_array[pin_ctrl_idx];
+
+   nr_banks = pin_ctrl->nr_banks;
+   if (!nr_banks)
break;
 
-   return priv->base + bank_data[idx].offset;
+   bank_data = pin_ctrl->pin_banks;
+   for (idx = 0; idx < nr_banks; idx++) {
+   debug("pinctrl[%d] bank_data[%d] name is: %s\n",
+   pin_ctrl_idx, idx, bank_data[idx].name);
+   if (!strcmp(bank, bank_data[idx].name)) {
+   bank_base = priv->base + bank_data[idx].offset;
+   break;
+   }
+   }
+   pin_ctrl_idx++;
+   }
+
+   return bank_base;
 }
 
 /**
-- 
2.20.1