mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-04 06:54:27 -05: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/mediatek/pinctrl-mtmips.c | 21 +++++++++++++++++----
 | 
						|
 1 file changed, 17 insertions(+), 4 deletions(-)
 | 
						|
 | 
						|
--- a/drivers/pinctrl/mediatek/pinctrl-mtmips.c
 | 
						|
+++ b/drivers/pinctrl/mediatek/pinctrl-mtmips.c
 | 
						|
@@ -123,11 +123,24 @@ static int mtmips_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;
 |