Re: [PATCH] pinctrl: mtmips: support requesting different functions for same group

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 26.07.2023 03:48, Shiji Yang wrote:
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@xxxxxxxxxxx>
---
  drivers/pinctrl/mediatek/pinctrl-mtmips.c | 21 +++++++++++++++++----
  1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/drivers/pinctrl/mediatek/pinctrl-mtmips.c b/drivers/pinctrl/mediatek/pinctrl-mtmips.c
index efd77b6c5..e5e085915 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mtmips.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mtmips.c
@@ -123,11 +123,24 @@ static int mtmips_pmx_group_enable(struct pinctrl_dev *pctrldev,
  	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;

Could you help me understand why? The @gpio_request_enable operation is not properly implemented on this driver so this check would never be true, no?

Even if it was, this makes it so that if a pin group is already given a function (meaning the pin group is enabled), it will never be given the gpio function when requested, unless I understand it wrong.

Arınç



[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux