[PATCH 3/3] w1: stop using struct device template for master devices
From: Danilo Krummrich
Date: Thu Aug 20 2026 - 18:55:11 EST
w1_alloc_dev() uses memcpy() with a static struct device template
(w1_master_device) to initialize new master devices.
Replace the memcpy() with a w1_master_dev_init() helper that sets only
bus, type, and release.
Signed-off-by: Danilo Krummrich <dakr@xxxxxxxxxx>
---
Compile-tested only, no hardware available.
---
drivers/w1/w1.c | 15 +++++++--------
drivers/w1/w1_int.c | 7 +++----
drivers/w1/w1_internal.h | 2 +-
3 files changed, 11 insertions(+), 13 deletions(-)
diff --git a/drivers/w1/w1.c b/drivers/w1/w1.c
index b40f2d9fd29d..d71e2a1568bd 100644
--- a/drivers/w1/w1.c
+++ b/drivers/w1/w1.c
@@ -193,19 +193,18 @@ struct device_driver w1_master_driver = {
.bus = &w1_bus_type,
};
-struct device w1_master_device = {
- .parent = NULL,
- .bus = &w1_bus_type,
- .type = &w1_master_device_type,
- .init_name = "w1 bus master",
- .release = &w1_master_release
-};
-
static struct device_driver w1_slave_driver = {
.name = "w1_slave_driver",
.bus = &w1_bus_type,
};
+void w1_master_dev_init(struct device *dev)
+{
+ dev->bus = &w1_bus_type;
+ dev->type = &w1_master_device_type;
+ dev->release = &w1_master_release;
+}
+
#if 0
struct device w1_slave_device = {
.parent = NULL,
diff --git a/drivers/w1/w1_int.c b/drivers/w1/w1_int.c
index 19a0ea28e9f3..a59ca19471e0 100644
--- a/drivers/w1/w1_int.c
+++ b/drivers/w1/w1_int.c
@@ -22,8 +22,7 @@ static int w1_enable_pullup = 1;
module_param_named(enable_pullup, w1_enable_pullup, int, 0);
static struct w1_master *w1_alloc_dev(u32 id, int slave_count, int slave_ttl,
- struct device_driver *driver,
- struct device *device)
+ struct device_driver *driver)
{
struct w1_master *dev;
int err;
@@ -57,7 +56,7 @@ static struct w1_master *w1_alloc_dev(u32 id, int slave_count, int slave_ttl,
mutex_init(&dev->bus_mutex);
mutex_init(&dev->list_mutex);
- memcpy(&dev->dev, device, sizeof(struct device));
+ w1_master_dev_init(&dev->dev);
dev_set_name(&dev->dev, "w1_bus_master%u", dev->id);
snprintf(dev->name, sizeof(dev->name), "w1_bus_master%u", dev->id);
dev->dev.init_name = dev->name;
@@ -116,7 +115,7 @@ int w1_add_master_device(struct w1_bus_master *master)
} while (found);
dev = w1_alloc_dev(id, w1_max_slave_count, w1_max_slave_ttl,
- &w1_master_driver, &w1_master_device);
+ &w1_master_driver);
if (!dev) {
mutex_unlock(&w1_mlock);
return -ENOMEM;
diff --git a/drivers/w1/w1_internal.h b/drivers/w1/w1_internal.h
index cb5a74e9939a..ffe7c7e8c4ca 100644
--- a/drivers/w1/w1_internal.h
+++ b/drivers/w1/w1_internal.h
@@ -65,7 +65,7 @@ void __w1_family_get(struct w1_family *f);
struct w1_family *w1_family_registered(u8 fid);
extern struct device_driver w1_master_driver;
-extern struct device w1_master_device;
+void w1_master_dev_init(struct device *dev);
extern int w1_max_slave_count;
extern int w1_max_slave_ttl;
extern struct list_head w1_masters;
--
2.55.0