Re: [PATCH 2/3] mfd: rohm-bd71828: Use software nodes for gpio-keys

From: Matti Vaittinen
Date: Mon Aug 18 2025 - 02:57:10 EST


On 18/08/2025 09:54, Matti Vaittinen wrote:
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) {")?

Oh. Probably "if (bd71828_reg_cnt == 1)".


+    }
+}
+

Other than that - I like this idea :)

Thanks!

Yours,
    -- Matti