Message ID | 20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org |
---|---|
Headers | show |
Series | gpio: sysfs: add a per-chip export/unexport attribute pair | expand |
On Tue, Jun 10, 2025 at 4:38 PM Bartosz Golaszewski <brgl@bgdev.pl> wrote: > From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> > > Exported GPIO lines also have the active_low attribute which is not > documented. Add a short mention for it. > > Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Yours, Linus Walleij
On Tue, Jun 10, 2025 at 4:38 PM Bartosz Golaszewski <brgl@bgdev.pl> wrote: > From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> > > While not critical, it's useful to have the corresponding call to > mutex_destroy() whenever we use mutex_init(). Add the call right before > kfreeing the GPIO data. > > Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Yours, Linus Walleij
On Tue, Jun 10, 2025 at 4:38 PM Bartosz Golaszewski <brgl@bgdev.pl> wrote: > From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> > > No symbols from the linux/idr.h or linux/spinlock.h headers are used in > this file so remove them. We also don't technically need linux/list.h > currently but one of the follow-up commits will start using it so let's > leave it. > > Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Yours, Linus Walleij
On Tue, Jun 10, 2025 at 4:38 PM Bartosz Golaszewski <brgl@bgdev.pl> wrote: > From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> > > In order to enable moving away from the global GPIO numberspace-based > exporting of lines over sysfs: add a parallel, per-chip entry under > /sys/class/gpio/ for every registered GPIO chip, denoted by device ID > in the file name and not its base GPIO number. > > Compared to the existing chip group: it does not contain the "base" > attribute as the goal of this change is to not refer to GPIOs by their > global number from user-space anymore. It also contains its own, > per-chip export/unexport attribute pair which allow to export lines by > their hardware offset within the chip. > > Caveat #1: the new device cannot be a link to (or be linked to by) the > existing "gpiochip<BASE>" entry as we cannot create links in > /sys/class/xyz/. > > Caveat #2: the new entry cannot be named "gpiochipX" as it could > conflict with devices whose base is statically defined to a low number. > Let's go with "chipX" instead. That's unfortunate but it's good to separate them, and gpio/gpiochip is a bit tautological so this is a better sysfs name anyway. > Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> > + /chipX ... for each gpiochip; #X is the gpio device ID > + /export ... asks the kernel to export a GPIO at HW offset X to userspace > + /unexport ... to return a GPIO at HW offset X to the kernel > + /label ... (r/o) descriptive, not necessarily unique Not necessarily *globally* unique, I think it's required to be unique per-gpiochip right? Otherwise it will be hard to create these files. > + /ngpio ... (r/o) number of GPIOs exposed by the chip I like this approach, it's a good compromise between different desires of the sysfs ABI. Acked-by: Linus Walleij <linus.walleij@linaro.org> Yours, Linus Walleij
Following our discussion[1], here's a proposal for extending the sysfs interface with attributes not referring to GPIO lines by their global numbers in a backward compatible way. Long story short: there is now a new class device for each GPIO chip. It's called chipX where X is the ID of the device as per the driver model and it lives next to the old gpiochipABC where ABC is the GPIO base. Each new chip class device has a pair of export/unexport attributes which work similarly to the global ones under /sys/class/gpio but take hardware offsets within the chip as input, instead of the global numbers. Finally, each exported line appears at the same time as the global /sys/class/gpio/gpioABC as well as per-chip /sys/class/gpio/chipX/gpioY sysfs group. First, there are some documentation updates, followed by a set of updates to the sysfs code that's useful even without the new functionality. Then the actual implementation of a parallel GPIO chip entry not containing the base GPIO number in the name and the corresponding sysfs attribute group for each exported line that lives under the new chip class device. Finally: also allow to compile out the legacy parts leaving only the new elements of the sysfs ABI. This series passes the compatibility tests I wrote while working on the user-space compatibility layer for sysfs[2]. [1] https://lore.kernel.org/all/CAMRc=McUCeZcU6co1aN54rTudo+JfPjjForu4iKQ5npwXk6GXA@mail.gmail.com/ [2] https://github.com/brgl/gpio-sysfs-compat-tests Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> --- Bartosz Golaszewski (15): Documentation: gpio: undocument removed behavior Documentation: gpio: document the active_low field in the sysfs ABI gpio: sysfs: call mutex_destroy() in gpiod_unexport() gpio: sysfs: refactor the coding style gpio: sysfs: remove unneeded headers gpio: sysfs: remove the mockdev pointer from struct gpio_device gpio: sysfs: add a parallel class device for each GPIO chip using device IDs gpio: sysfs: only get the dirent reference for the value attr once gpio: sysfs: pass gpiod_data directly to internal GPIO sysfs functions gpio: sysfs: don't use driver data in sysfs callbacks for line attributes gpio: sysfs: rename the data variable in gpiod_(un)export() gpio: sysfs: don't look up exported lines as class devices gpio: sysfs: export the GPIO directory locally in the gpiochip<id> directory gpio: sysfs: allow disabling the legacy parts of the GPIO sysfs interface gpio: TODO: remove the task for the sysfs rework Documentation/ABI/obsolete/sysfs-gpio | 12 +- drivers/gpio/Kconfig | 8 + drivers/gpio/TODO | 13 - drivers/gpio/gpiolib-sysfs.c | 650 ++++++++++++++++++++++++---------- drivers/gpio/gpiolib.h | 3 - 5 files changed, 474 insertions(+), 212 deletions(-) --- base-commit: 19272b37aa4f83ca52bdf9c16d5d81bdd1354494 change-id: 20250402-gpio-sysfs-chip-export-84ac424b61c5 Best regards,