mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-26 00:41:17 +00:00
46 lines
1.4 KiB
Diff
46 lines
1.4 KiB
Diff
|
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;
|