#include #include #include #include static struct device dev_par_0; static struct device dev_par_0_child_0; static struct device dev_par_1; static struct device dev_par_1_child_0; static struct class test_class_class = { .name = "test_class", }; static int create_test_devices(void) { int result; dev_set_name(&dev_par_0, "power_zone_cpu_package_0"); dev_par_0.class = &test_class_class; result = device_register(&dev_par_0); if (result) { pr_err("device_register failed for parent_0\n"); return result; } dev_set_name(&dev_par_1, "power_zone_cpu_package_1"); dev_par_1.class = &test_class_class; result = device_register(&dev_par_1); if (result) { pr_err("device_register failed for parent_0\n"); goto error_par1; } dev_set_name(&dev_par_0_child_0, "power-zone-cpu-0"); dev_par_0_child_0.class = &test_class_class; dev_par_0_child_0.parent = &dev_par_0; result = device_register(&dev_par_0_child_0); if (result) { pr_err("device_register failed for dev_par_0_child_0\n"); goto error_par0_child_0; } dev_set_name(&dev_par_1_child_0, "power-zone-cpu-0"); dev_par_1_child_0.class = &test_class_class; dev_par_1_child_0.parent = &dev_par_1; result = device_register(&dev_par_1_child_0); if (result) { pr_err("device_register failed for dev_par_1_child_0\n"); goto error_par0_child_1; } return 0; error_par0_child_1: device_unregister(&dev_par_0_child_0); error_par0_child_0: device_unregister(&dev_par_1); error_par1: device_unregister(&dev_par_0); return result; } static int __init dev_create_test_init(void) { int result = 0; pr_debug("dev_create_test_init\n"); result = class_register(&test_class_class); if (result) return result; result = create_test_devices(); return result; } static void dev_create_test_exit(void) { pr_debug("dev_create_test_exit\n"); device_unregister(&dev_par_0_child_0); device_unregister(&dev_par_1_child_0); device_unregister(&dev_par_0); device_unregister(&dev_par_1); class_unregister(&test_class_class); } module_init(dev_create_test_init) module_exit(dev_create_test_exit) MODULE_LICENSE("GPL v2");