Re: [PATCH v3 1/2] mfd: rohm-bd71828: Use software nodes for gpio-keys
From: Matti Vaittinen
Date: Fri Mar 27 2026 - 07:02:39 EST
On 25/03/2026 02:54, 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.
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 | 120 +++++++++++++++++++++++++++++++++------------
1 file changed, 88 insertions(+), 32 deletions(-)
diff --git a/drivers/mfd/rohm-bd71828.c b/drivers/mfd/rohm-bd71828.c
index a79f354bf5cb..e78af75a2115 100644
--- a/drivers/mfd/rohm-bd71828.c
+++ b/drivers/mfd/rohm-bd71828.c
// snip
+static int bd71828_i2c_register_pwrbutton(struct device *dev, int button_irq,
+ struct irq_domain *irq_domain)
+{
+ static const struct property_entry bd71828_powerkey_parent_props[] = {
+ PROPERTY_ENTRY_STRING("label", "bd71828-pwrkey"),
+ { }
+ };
+ static const struct property_entry bd71828_powerkey_props[] = {
+ PROPERTY_ENTRY_U32("linux,code", KEY_POWER),
+ PROPERTY_ENTRY_BOOL("wakeup-source"),
+ { }
+ };
+ const struct resource res[] = {
+ DEFINE_RES_IRQ_NAMED(button_irq, "bd71828-pwrkey"),
+ };
+ struct mfd_cell gpio_keys_cell = {
+ .name = "gpio-keys",
+ .resources = res,
+ .num_resources = ARRAY_SIZE(res),
+ };
+ const struct software_node * const *node_group;
+ struct software_node *nodes;
+ int error;
+
+ nodes = devm_kcalloc(dev, 2, sizeof(*nodes), GFP_KERNEL);
+ if (!nodes)
+ return -ENOMEM;
+
+ /* Node corresponding to gpio-keys device itself */
+ nodes[0].name = devm_kasprintf(dev, GFP_KERNEL, "%s-power-key", dev_name(dev));
+ if (!nodes[0].name)
+ return -ENOMEM;
+
+ nodes[0].properties = bd71828_powerkey_parent_props;
+
+ /* Node representing power button within gpio-keys device */
+ nodes[1].parent = &nodes[0];
+ nodes[1].properties = bd71828_powerkey_props;
+
+ node_group = (const struct software_node *[]){
+ &nodes[0],
+ &nodes[1],
+ NULL
+ };
Here, same as with the 2/2. This construct seems a tad strange to me, but I suppose I can live with it if Lee thinks this is the way to go.
Yours,
-- Matti
--
---
Matti Vaittinen
Linux kernel developer at ROHM Semiconductors
Oulu Finland
~~ When things go utterly wrong vim users can always type :help! ~~