[PATCH 0/2] [v5] pinctrl: qcom: add support for sparse GPIOs
From: Timur Tabi <hidden>
Date: 2017-10-16 13:42:44
Also in:
linux-arm-msm, linux-gpio
On 10/14/2017 05:43 PM, Linus Walleij wrote:
So I guess the driver needs to know what pin registers it can't access so the user does not get a gun to shoot in the foot with. If we augment gpiolib to just handle -EACCES or something (-EIO?) from the driver .get_direction() callback for these lines, things should be smooth?
You mean like this:
diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c index ff491da64dab..ca4ae3d76eb4 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm.c@@ -443,6 +443,14 @@ static int msm_gpio_get_direction(struct gpio_chip *chip, unsigned int offset) g = &pctrl->soc->groups[offset]; + /* + * During initialization, gpiolib may query all GPIOs for their + * initial direction, regardless if they exist, so block access + * to those that are unavailable. + */ + if (!g->npins) + return -ENODEV; + val = readl(pctrl->regs + g->ctl_reg); /* 0 = output, 1 = input */ This is what I have in my patch already. I can return any error message you like, but -ENODEV already works. The problem is that it's insufficient. I also want the non-available GPIOs to be as absent as possible. I don't want them to show up in /sys/kernel/debug/gpio, and I don't want to be able to create them via /sys/class/gpio/export. -- Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.