[PATCH v2 07/26] staging: most: core: use structure to pack driver specific data

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This patch introduces the structure "mostcore" to bundle core specific
data structures.

Signed-off-by: Christian Gromm <christian.gromm@xxxxxxxxxxxxx>
---
v2: fix patch numeration

 drivers/staging/most/core.c | 64 ++++++++++++++++++++++++---------------------
 1 file changed, 34 insertions(+), 30 deletions(-)

diff --git a/drivers/staging/most/core.c b/drivers/staging/most/core.c
index 9d37ace..1af5b1c 100644
--- a/drivers/staging/most/core.c
+++ b/drivers/staging/most/core.c
@@ -32,11 +32,19 @@
 #define MAX_CHANNELS	64
 #define STRING_SIZE	80
 
-static struct class *most_class;
-static struct device core_dev;
 static struct ida mdev_id;
 static int dummy_num_buffers;
 
+static struct mostcore {
+	struct device dev;
+	struct device_driver drv;
+	struct bus_type bus;
+	struct class *class;
+	struct list_head mod_list;
+} mc;
+
+#define to_driver(d) container_of(d, struct mostcore, drv);
+
 struct pipe {
 	struct most_aim *aim;
 	int refs;
@@ -98,15 +106,6 @@ int most_match(struct device *dev, struct device_driver *drv)
 		return 1;
 }
 
-static struct bus_type most_bus_type = {
-	.name = "most",
-	.match = most_match,
-};
-
-static struct device_driver mostcore = {
-	.name = "most_core",
-	.bus = &most_bus_type,
-};
 /**
  * list_pop_mbo - retrieves the first MBO of the list and removes it
  * @ptr: the list head to grab the MBO from.
@@ -1297,8 +1296,8 @@ int most_register_aim(struct most_aim *aim)
 		return -EINVAL;
 	}
 	aim->dev.init_name = aim->name;
-	aim->dev.bus = &most_bus_type;
-	aim->dev.parent = &core_dev;
+	aim->dev.bus = &mc.bus;
+	aim->dev.parent = &mc.dev;
 	aim->dev.groups = aim_attr_groups;
 	aim->dev.release = release_aim;
 	ret = device_register(&aim->dev);
@@ -1394,8 +1393,8 @@ int most_register_interface(struct most_interface *iface)
 	list_add_tail(&inst->list, &instance_list);
 	snprintf(name, STRING_SIZE, "mdev%d", id);
 	iface->dev.init_name = name;
-	iface->dev.bus = &most_bus_type;
-	iface->dev.parent = &core_dev;
+	iface->dev.bus = &mc.bus;
+	iface->dev.parent = &mc.dev;
 	iface->dev.groups = interface_attr_groups;
 	iface->dev.release = release_interface;
 	if (device_register(&iface->dev)) {
@@ -1560,47 +1559,52 @@ static int __init most_init(void)
 	INIT_LIST_HEAD(&aim_list);
 	ida_init(&mdev_id);
 
-	err = bus_register(&most_bus_type);
+	mc.bus.name = "most",
+	mc.bus.match = most_match,
+	mc.drv.name = "most_core",
+	mc.drv.bus = &mc.bus,
+
+	err = bus_register(&mc.bus);
 	if (err) {
 		pr_info("Cannot register most bus\n");
 		return err;
 	}
-	most_class = class_create(THIS_MODULE, "most");
-	if (IS_ERR(most_class)) {
+	mc.class = class_create(THIS_MODULE, "most");
+	if (IS_ERR(mc.class)) {
 		pr_info("No udev support.\n");
-		err = PTR_ERR(most_class);
+		err = PTR_ERR(mc.class);
 		goto exit_bus;
 	}
 
-	err = driver_register(&mostcore);
+	err = driver_register(&mc.drv);
 	if (err) {
 		pr_info("Cannot register core driver\n");
 		goto exit_class;
 	}
-	core_dev.init_name = "most_bus";
-	core_dev.release = release_most_sub;
-	if (device_register(&core_dev)) {
+	mc.dev.init_name = "most_bus";
+	mc.dev.release = release_most_sub;
+	if (device_register(&mc.dev)) {
 		err = -ENOMEM;
 		goto exit_driver;
 	}
 	return 0;
 
 exit_driver:
-	driver_unregister(&mostcore);
+	driver_unregister(&mc.drv);
 exit_class:
-	class_destroy(most_class);
+	class_destroy(mc.class);
 exit_bus:
-	bus_unregister(&most_bus_type);
+	bus_unregister(&mc.bus);
 	return err;
 }
 
 static void __exit most_exit(void)
 {
 	pr_info("exit core module\n");
-	device_unregister(&core_dev);
-	driver_unregister(&mostcore);
-	class_destroy(most_class);
-	bus_unregister(&most_bus_type);
+	device_unregister(&mc.dev);
+	driver_unregister(&mc.drv);
+	class_destroy(mc.class);
+	bus_unregister(&mc.bus);
 	ida_destroy(&mdev_id);
 }
 
-- 
1.9.1

_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel



[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux