From: Bartosz Golaszewski <brgl@bgdev.pl>
To: Linus Walleij <linus.walleij@linaro.org>,
Kent Gibson <warthog618@gmail.com>
Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org,
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Subject: [PATCH] gpio: create empty /sys/class/gpio with SYSFS disabled
Date: Mon, 14 Oct 2024 14:10:47 +0200 [thread overview]
Message-ID: <20241014121047.103179-1-brgl@bgdev.pl> (raw)
From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
User-space may want to use some kind of a compatibility layer for the
deprecated GPIO sysfs ABI. This would typically involve mounting
a fuse-based filesystem using the GPIO character device to emulate the
sysfs behavior and layout.
With GPIO_SYSFS disabled, the /sys/class/gpio directory doesn't exist
and user-space cannot create it. In order to facilitate moving away from
the sysfs, add a new Kconfig option that indicates to GPIOLIB that is
should create an empty directory where the GPIO class interface would
exist and enable it by default.
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
---
As I've mentioned under a different patch, I'm working on a user-space
compatibility layer for the sysfs GPIO interface. FUSE allows us to
emulate almost all its functionalities using libgpiod except for
mounting it under /sys/class/gpio if GPIO_SYSFS is disabled. User-space
cannot create directories in sysfs so if we want to allow users to mount
the FUSE emulator under the old location, we need to create an empty
/sys/class/gpio directory from the kernel and this is what is patch is
for.
drivers/gpio/Kconfig | 18 ++++++++++++++++++
drivers/gpio/gpiolib.c | 12 ++++++++++++
2 files changed, 30 insertions(+)
diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
index bfa6b5a2c537..f2e7163cb46c 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -69,6 +69,24 @@ config GPIO_SYSFS
use the character device /dev/gpiochipN with the appropriate
ioctl() operations instead.
+config GPIO_SYSFS_CLASS_DIR_STUB
+ bool "Create empty /sys/class/gpio directory" if EXPERT
+ depends on !GPIO_SYSFS
+ default y
+ help
+ Say Y here to create an empty /sys/class/gpio directory.
+
+ User-space may want to use some kind of a compatibility layer for the
+ deprecated GPIO sysfs ABI. This would typically involve mounting
+ a fuse-based filesystem using the GPIO character device to emulate
+ the sysfs behavior and layout.
+
+ This option makes GPIOLIB create an empty directory at /sys/class/gpio
+ where user-space can mount the sysfs replacement and avoid having to
+ change existing programs to adjust to different filesystem paths.
+
+ If unsure, say Y.
+
config GPIO_CDEV
bool
prompt "Character device (/dev/gpiochipN) support" if EXPERT
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 97346b746ef5..31efb580beb8 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -4873,6 +4873,12 @@ static struct device_driver gpio_stub_drv = {
.probe = gpio_stub_drv_probe,
};
+#if IS_ENABLED(CONFIG_GPIO_SYSFS_CLASS_DIR_STUB)
+static const struct class gpio_class_stub = {
+ .name = "gpio",
+};
+#endif /* CONFIG_GPIO_SYSFS_CLASS_DIR_STUB */
+
static int __init gpiolib_dev_init(void)
{
int ret;
@@ -4899,6 +4905,12 @@ static int __init gpiolib_dev_init(void)
return ret;
}
+#if IS_ENABLED(CONFIG_GPIO_SYSFS_CLASS_DIR_STUB)
+ ret = class_register(&gpio_class_stub);
+ if (ret)
+ pr_err("gpiolib: failed to create the empty gpio class directory\n");
+#endif /* CONFIG_GPIO_SYSFS_CLASS_DIR_STUB */
+
gpiolib_initialized = true;
gpiochip_setup_devs();
--
2.43.0
next reply other threads:[~2024-10-14 12:10 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-14 12:10 Bartosz Golaszewski [this message]
2024-10-14 14:50 ` [PATCH] gpio: create empty /sys/class/gpio with SYSFS disabled Bartosz Golaszewski
2024-10-15 2:20 ` Kent Gibson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241014121047.103179-1-brgl@bgdev.pl \
--to=brgl@bgdev.pl \
--cc=bartosz.golaszewski@linaro.org \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=warthog618@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.