[PATCH v5 07/14] mfd: lm3533: Use dev_groups in struct device_driver

From: Svyatoslav Ryhel

Date: Wed Jun 17 2026 - 04:03:28 EST


Instead of creating and removing the device sysfs attributes directly
during probe and remove of the driver, respectively, use dev_groups in
struct device_driver to point to the attribute definitions and let the
core take care of creating and removing them.

No intentional functional impact.

Signed-off-by: Svyatoslav Ryhel <clamor95@xxxxxxxxx>
---
drivers/mfd/lm3533-core.c | 16 ++++++----------
drivers/video/backlight/lm3533_bl.c | 22 ++++++++--------------
2 files changed, 14 insertions(+), 24 deletions(-)

diff --git a/drivers/mfd/lm3533-core.c b/drivers/mfd/lm3533-core.c
index 45e7f7481aa0..b03a3ae96c10 100644
--- a/drivers/mfd/lm3533-core.c
+++ b/drivers/mfd/lm3533-core.c
@@ -296,6 +296,11 @@ static struct attribute_group lm3533_attribute_group = {
.attrs = lm3533_attributes
};

+static const struct attribute_group *lm3533_attribute_groups[] = {
+ &lm3533_attribute_group,
+ NULL,
+};
+
static int lm3533_device_als_init(struct lm3533 *lm3533)
{
struct lm3533_platform_data *pdata = dev_get_platdata(lm3533->dev);
@@ -416,16 +421,8 @@ static int lm3533_device_init(struct lm3533 *lm3533)
lm3533_device_bl_init(lm3533);
lm3533_device_led_init(lm3533);

- ret = sysfs_create_group(&lm3533->dev->kobj, &lm3533_attribute_group);
- if (ret < 0) {
- dev_err(lm3533->dev, "failed to create sysfs attributes\n");
- goto err_unregister;
- }
-
return 0;

-err_unregister:
- mfd_remove_devices(lm3533->dev);
err_disable:
lm3533_disable(lm3533);

@@ -436,8 +433,6 @@ static void lm3533_device_exit(struct lm3533 *lm3533)
{
dev_dbg(lm3533->dev, "%s\n", __func__);

- sysfs_remove_group(&lm3533->dev->kobj, &lm3533_attribute_group);
-
mfd_remove_devices(lm3533->dev);
lm3533_disable(lm3533);
}
@@ -532,6 +527,7 @@ MODULE_DEVICE_TABLE(i2c, lm3533_i2c_ids);
static struct i2c_driver lm3533_i2c_driver = {
.driver = {
.name = "lm3533",
+ .dev_groups = lm3533_attribute_groups,
},
.id_table = lm3533_i2c_ids,
.probe = lm3533_i2c_probe,
diff --git a/drivers/video/backlight/lm3533_bl.c b/drivers/video/backlight/lm3533_bl.c
index 4d6f68033480..9ef171d3aaea 100644
--- a/drivers/video/backlight/lm3533_bl.c
+++ b/drivers/video/backlight/lm3533_bl.c
@@ -237,6 +237,11 @@ static struct attribute_group lm3533_bl_attribute_group = {
.attrs = lm3533_bl_attributes
};

+static const struct attribute_group *lm3533_bl_attribute_groups[] = {
+ &lm3533_bl_attribute_group,
+ NULL,
+};
+
static int lm3533_bl_setup(struct lm3533_bl *bl,
struct lm3533_bl_platform_data *pdata)
{
@@ -304,28 +309,17 @@ static int lm3533_bl_probe(struct platform_device *pdev)

platform_set_drvdata(pdev, bl);

- ret = sysfs_create_group(&bd->dev.kobj, &lm3533_bl_attribute_group);
- if (ret < 0) {
- dev_err(&pdev->dev, "failed to create sysfs attributes\n");
- return ret;
- }
-
backlight_update_status(bd);

ret = lm3533_bl_setup(bl, pdata);
if (ret)
- goto err_sysfs_remove;
+ return ret;

ret = lm3533_ctrlbank_enable(&bl->cb);
if (ret)
- goto err_sysfs_remove;
+ return ret;

return 0;
-
-err_sysfs_remove:
- sysfs_remove_group(&bd->dev.kobj, &lm3533_bl_attribute_group);
-
- return ret;
}

static void lm3533_bl_remove(struct platform_device *pdev)
@@ -339,7 +333,6 @@ static void lm3533_bl_remove(struct platform_device *pdev)
bd->props.brightness = 0;

lm3533_ctrlbank_disable(&bl->cb);
- sysfs_remove_group(&bd->dev.kobj, &lm3533_bl_attribute_group);
}

#ifdef CONFIG_PM_SLEEP
@@ -377,6 +370,7 @@ static struct platform_driver lm3533_bl_driver = {
.driver = {
.name = "lm3533-backlight",
.pm = &lm3533_bl_pm_ops,
+ .dev_groups = lm3533_bl_attribute_groups,
},
.probe = lm3533_bl_probe,
.remove = lm3533_bl_remove,
--
2.53.0