On 18/08/2025 01:47, Dmitry Torokhov wrote:
Refactor the rohm-bd71828 MFD driver to use software nodes for
instantiating the gpio-keys child device, replacing the old
platform_data mechanism.
Thanks for doing this Dmitry! I believe I didn't understand how
providing the IRQs via swnode works... :)
If I visit the ROHM office this week, then I will try to test this using
the PMIC HW. (Next week I'll be in ELCE, and after it I have probably
already forgotten this...)
The power key's properties are now defined using software nodes and
property entries. The IRQ is passed as a resource attached to the
platform device.
This will allow dropping support for using platform data for configuring
gpio-keys in the future.
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx>
---
drivers/mfd/rohm-bd71828.c | 81 +++++++++++++++++++++++++++-----------
1 file changed, 58 insertions(+), 23 deletions(-)
diff --git a/drivers/mfd/rohm-bd71828.c b/drivers/mfd/rohm-bd71828.c
index a14b7aa69c3c..c29dde9996b7 100644
--- a/drivers/mfd/rohm-bd71828.c
+++ b/drivers/mfd/rohm-bd71828.c
@@ -4,7 +4,6 @@
// ...snip
+static int bd71828_reg_cnt;
+
+static int bd71828_i2c_register_swnodes(void)
+{
+ int error;
+
+ if (bd71828_reg_cnt == 0) {
Isn't this check racy...
+ error = software_node_register_node_group(bd71828_swnodes);
+ if (error)
+ return error;
+ }
+
+ bd71828_reg_cnt++;
... with this...
+ return 0;
+}
+
+static void bd71828_i2c_unregister_swnodes(void *dummy)
+{
+ if (bd71828_reg_cnt != 0) {
...this...
+ software_node_unregister_node_group(bd71828_swnodes);
+ bd71828_reg_cnt--;
...and this? Perhaps add a mutex or use atomics?
Also, shouldn't the software_node_unregister_node_group() be only called
for the last instance to exit (Eg, "if (bd71828_reg_cnt == 0)" instead
of the "if (bd71828_reg_cnt != 0) {")?
+ }
+}
+
Other than that - I like this idea :)
Thanks!
Yours,
-- Matti