From: Sudeep Holla <sudeep.holla@arm.com>
To: linux-kernel@vger.kernel.org
Cc: Sudeep Holla <sudeep.holla@arm.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: [PATCH v2 1/8] driver core: add helper macro for module_faux_driver() boilerplate
Date: Tue, 18 Mar 2025 17:01:39 +0000 [thread overview]
Message-ID: <20250318-plat2faux_dev-v2-1-e6cc73f78478@arm.com> (raw)
In-Reply-To: <20250318-plat2faux_dev-v2-0-e6cc73f78478@arm.com>
For simple modules that needs to create a faux device without any
additional setup code ends up being a block of duplicated boilerplate.
Add a new macro, module_faux_driver(), which help to replaces the
those duplicated boilerplate.
This macro use the same idea of module_platform_driver() but adds this
initial condition to avoid creation of faux device if not necessary.
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
---
include/linux/device/faux.h | 49 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/include/linux/device/faux.h b/include/linux/device/faux.h
index 9f43c0e46aa45bf492788adcdc081df5cc0c5fc0..4a54736d86595e46c98ac3ab9c45a7e5a344333e 100644
--- a/include/linux/device/faux.h
+++ b/include/linux/device/faux.h
@@ -15,6 +15,7 @@
#include <linux/container_of.h>
#include <linux/device.h>
+#include <linux/stringify.h>
/**
* struct faux_device - a "faux" device
@@ -66,4 +67,52 @@ static inline void faux_device_set_drvdata(struct faux_device *faux_dev, void *d
dev_set_drvdata(&faux_dev->dev, data);
}
+#define FAUX_DEVICE(__faux_devname) \
+static struct faux_device *__faux_devname##_dev;
+
+#define FAUX_DEVICE_OPS(__faux_devname, __faux_probe, __faux_remove) \
+static const struct faux_device_ops __faux_devname##_ops = { \
+ .probe = __faux_probe, \
+ .remove = __faux_remove, \
+}; \
+FAUX_DEVICE(__faux_devname)
+
+static inline int
+__faux_device_register(struct faux_device **faux_dev, const char *name,
+ const struct faux_device_ops *faux_ops, bool condition)
+{
+ struct faux_device *fdev;
+
+ if (!condition)
+ return 0;
+
+ fdev = faux_device_create(name, NULL, faux_ops);
+ if (!fdev)
+ return -ENODEV;
+
+ *faux_dev = fdev;
+ return 0;
+}
+
+#define faux_device_register(faux_dev, faux_devname, init_condition) \
+ __faux_device_register(faux_dev, __stringify(faux_devname), \
+ &faux_devname##_ops, init_condition)
+
+#define faux_device_unregister(faux_dev, ...) \
+ faux_device_destroy(*faux_dev)
+
+/* module_faux_driver() - Helper macro for faux drivers that don't do
+ * anything special in module init/exit. This eliminates a lot of
+ * boilerplate. Each module may only use this macro once, and
+ * calling it replaces module_init() and module_exit(). The module init
+ * creates a faux device if the init condition is met and module exit
+ * destroys the created device. FAUX_DEVICE_OPS must be used to declare
+ * faux device ops and the device pointer.
+ */
+#define module_faux_driver(__faux_devname, __faux_probe, __faux_remove, \
+ __init_condition) \
+ FAUX_DEVICE_OPS(__faux_devname, __faux_probe, __faux_remove) \
+ module_driver(__faux_devname##_dev, faux_device_register, \
+ faux_device_unregister, __faux_devname, __init_condition)
+
#endif /* _FAUX_DEVICE_H_ */
--
2.34.1
next prev parent reply other threads:[~2025-03-18 17:02 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-18 17:01 [PATCH v2 0/8] drivers: Transition to the faux device interface Sudeep Holla
2025-03-18 17:01 ` Sudeep Holla [this message]
2025-04-15 12:21 ` [PATCH v2 1/8] driver core: add helper macro for module_faux_driver() boilerplate Greg Kroah-Hartman
2025-04-15 12:25 ` Sudeep Holla
2025-03-18 17:01 ` [PATCH v2 2/8] cpuidle: psci: Transition to the faux device interface Sudeep Holla
2025-04-15 12:21 ` Greg Kroah-Hartman
2025-04-15 12:35 ` Sudeep Holla
2025-05-01 13:01 ` Jon Hunter
2025-05-01 16:07 ` Sudeep Holla
2025-05-02 10:20 ` Jon Hunter
2025-03-18 17:01 ` [PATCH v2 3/8] hwrng: arm-smccc-trng - transition " Sudeep Holla
2025-03-18 17:01 ` [PATCH v2 4/8] rtc: efi: Transition " Sudeep Holla
2025-04-08 14:45 ` (subset) " Alexandre Belloni
2025-04-08 15:01 ` Sudeep Holla
2025-03-18 17:01 ` [PATCH v2 5/8] virt: efi_secret: " Sudeep Holla
2025-03-18 17:10 ` Ard Biesheuvel
2025-03-19 13:15 ` Sudeep Holla
2025-03-19 14:24 ` Greg Kroah-Hartman
2025-03-19 14:30 ` Sudeep Holla
2025-03-18 17:01 ` [PATCH v2 6/8] efi: efivars: " Sudeep Holla
2025-03-18 17:01 ` [PATCH v2 7/8] ACPI: APEI: EINJ: " Sudeep Holla
2025-04-09 18:18 ` Rafael J. Wysocki
2025-03-18 17:01 ` [PATCH v2 8/8] net: phy: fixed_phy: transition " Sudeep Holla
2025-03-18 17:12 ` Andrew Lunn
2025-03-19 11:05 ` Sudeep Holla
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=20250318-plat2faux_dev-v2-1-e6cc73f78478@arm.com \
--to=sudeep.holla@arm.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®