diff mbox series

pinctrl: qcom: fail to retrieve configuration from invalid pin groups

Message ID 20231128020202.728156-3-mailingradian@gmail.com
State Accepted
Commit 27030ff7877262b0555a2870b0e401ebbc0e72c3
Headers show
Series pinctrl: qcom: fail to retrieve configuration from invalid pin groups | expand

Commit Message

Richard Acayan Nov. 28, 2023, 2:02 a.m. UTC
The pinconf-groups debugfs file dumps each valid configuration item of
all pin groups. Some platforms and devices may have pin groups which
cannot be accessed, according to commit 691bf5d5a7bf ("pinctrl: qcom:
Don't allow protected pins to be requested"). Fail for each
configuration item of an invalid pin group by checking the GPIO chip's
valid mask.

The validity of the pin group cannot be checked in the generic pinconf
dump (function "pinconf_generic_dump_one"), as it does not directly
interact with the gpiochip or the pinmux callbacks (which would give it
access to the request callback). Instead, an entry contains the ID and
name of the pingroup with no properties when all items fail.

Signed-off-by: Richard Acayan <mailingradian@gmail.com>
---
First few lines of pinconf-generic on SDM670 with this patch:

    Pin config settings per pin group
    Format: group (name): configs
    0 (gpio0):
    1 (gpio1):
    2 (gpio2):
    3 (gpio3):
    4 (gpio4): input bias disabled, output drive strength (16 mA), output enabled, pin output (0 level)
---
 drivers/pinctrl/qcom/pinctrl-msm.c | 4 ++++
 1 file changed, 4 insertions(+)
diff mbox series

Patch

diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
index 395040346d0f..0392b99d8be3 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm.c
@@ -358,6 +358,10 @@  static int msm_config_group_get(struct pinctrl_dev *pctldev,
 	int ret;
 	u32 val;
 
+	/* Pin information can only be requested from valid pin groups */
+	if (!gpiochip_line_is_valid(&pctrl->chip, group))
+		return -EINVAL;
+
 	g = &pctrl->soc->groups[group];
 
 	ret = msm_config_reg(pctrl, g, param, &mask, &bit);