ramips: 6.1: copy config and patches
[openwrt/staging/wigyori.git] / target / linux / ramips / patches-6.1 / 808-pinctrl-mtmips-support-requesting-different-function.patch
diff --git a/target/linux/ramips/patches-6.1/808-pinctrl-mtmips-support-requesting-different-function.patch b/target/linux/ramips/patches-6.1/808-pinctrl-mtmips-support-requesting-different-function.patch
new file mode 100644 (file)
index 0000000..047808f
--- /dev/null
@@ -0,0 +1,45 @@
+From: Shiji Yang <yangshiji66@outlook.com>
+Date: Wed, 26 Jul 2023 01:32:55 +0800
+Subject: [PATCH] pinctrl: mtmips: support requesting different functions for
+ same group
+
+Sometimes pinctrl consumers may request different functions for the
+same pin group in different situations. This patch can help to reset
+the group function flag when requesting a different function.
+
+Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
+---
+ drivers/pinctrl/ralink/pinctrl-ralink.c | 21 +++++++++++++++++----
+ 1 file changed, 17 insertions(+), 4 deletions(-)
+
+--- a/drivers/pinctrl/ralink/pinctrl-ralink.c
++++ b/drivers/pinctrl/ralink/pinctrl-ralink.c
+@@ -123,11 +123,24 @@ static int ralink_pmx_group_enable(struc
+       int i;
+       int shift;
+-      /* dont allow double use */
++      /*
++       * for the same pin group, if request a different function,
++       * then clear the group function flag and continue, else exit.
++       */
+       if (p->groups[group].enabled) {
+-              dev_err(p->dev, "%s is already enabled\n",
+-                      p->groups[group].name);
+-              return 0;
++              for (i = 0; i < p->groups[group].func_count; i++) {
++                      if (p->groups[group].func[i].enabled == 1) {
++                              if (!strcmp(p->func[func]->name,
++                                      p->groups[group].func[i].name))
++                                      return 0;
++                              p->groups[group].func[i].enabled = 0;
++                              break;
++                      }
++              }
++
++              /* exit if request the "gpio" function again */
++              if (i == p->groups[group].func_count && func == 0)
++                      return 0;
+       }
+       p->groups[group].enabled = 1;