|
@@ -85,30 +85,50 @@ static struct attribute_group dgrp_global_settings_attribute_group = {
|
|
|
|
|
|
|
|
|
|
|
|
-void dgrp_create_class_sysfs_files(void)
|
|
|
+int dgrp_create_class_sysfs_files(void)
|
|
|
{
|
|
|
int ret = 0;
|
|
|
int max_majors = 1U << (32 - MINORBITS);
|
|
|
|
|
|
dgrp_class = class_create(THIS_MODULE, "digi_realport");
|
|
|
+ if (IS_ERR(dgrp_class))
|
|
|
+ return PTR_ERR(dgrp_class);
|
|
|
ret = class_create_file(dgrp_class, &class_attr_driver_version);
|
|
|
+ if (ret)
|
|
|
+ goto err_class;
|
|
|
|
|
|
dgrp_class_global_settings_dev = device_create(dgrp_class, NULL,
|
|
|
MKDEV(0, max_majors + 1), NULL, "driver_settings");
|
|
|
-
|
|
|
+ if (IS_ERR(dgrp_class_global_settings_dev)) {
|
|
|
+ ret = PTR_ERR(dgrp_class_global_settings_dev);
|
|
|
+ goto err_file;
|
|
|
+ }
|
|
|
ret = sysfs_create_group(&dgrp_class_global_settings_dev->kobj,
|
|
|
&dgrp_global_settings_attribute_group);
|
|
|
if (ret) {
|
|
|
pr_alert("%s: failed to create sysfs global settings device attributes.\n",
|
|
|
__func__);
|
|
|
- sysfs_remove_group(&dgrp_class_global_settings_dev->kobj,
|
|
|
- &dgrp_global_settings_attribute_group);
|
|
|
- return;
|
|
|
+ goto err_dev1;
|
|
|
}
|
|
|
|
|
|
dgrp_class_nodes_dev = device_create(dgrp_class, NULL,
|
|
|
MKDEV(0, max_majors + 2), NULL, "nodes");
|
|
|
+ if (IS_ERR(dgrp_class_nodes_dev)) {
|
|
|
+ ret = PTR_ERR(dgrp_class_nodes_dev);
|
|
|
+ goto err_group;
|
|
|
+ }
|
|
|
|
|
|
+ return 0;
|
|
|
+err_group:
|
|
|
+ sysfs_remove_group(&dgrp_class_global_settings_dev->kobj,
|
|
|
+ &dgrp_global_settings_attribute_group);
|
|
|
+err_dev1:
|
|
|
+ device_destroy(dgrp_class, MKDEV(0, max_majors + 1));
|
|
|
+err_file:
|
|
|
+ class_remove_file(dgrp_class, &class_attr_driver_version);
|
|
|
+err_class:
|
|
|
+ class_destroy(dgrp_class);
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
|