Commit fadfcf36 authored by Ivan Orlov's avatar Ivan Orlov Committed by Jiri Kosina

HID: roccat: make all 'class' structures const

Now that the driver core allows for struct class to be in read-only
memory, making all 'class' structures to be declared at build time
placing them into read-only memory, instead of having to be dynamically
allocated at load time.

Cc: Stefan Achatz <erazor_de@users.sourceforge.net>
Cc: Jiri Kosina <jikos@kernel.org>
Cc: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Cc: linux-input@vger.kernel.org
Suggested-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarIvan Orlov <ivan.orlov0322@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 1d754604
...@@ -23,8 +23,6 @@ ...@@ -23,8 +23,6 @@
#include "hid-roccat-common.h" #include "hid-roccat-common.h"
#include "hid-roccat-arvo.h" #include "hid-roccat-arvo.h"
static struct class *arvo_class;
static ssize_t arvo_sysfs_show_mode_key(struct device *dev, static ssize_t arvo_sysfs_show_mode_key(struct device *dev,
struct device_attribute *attr, char *buf) struct device_attribute *attr, char *buf)
{ {
...@@ -268,6 +266,11 @@ static const struct attribute_group *arvo_groups[] = { ...@@ -268,6 +266,11 @@ static const struct attribute_group *arvo_groups[] = {
NULL, NULL,
}; };
static const struct class arvo_class = {
.name = "arvo",
.dev_groups = arvo_groups,
};
static int arvo_init_arvo_device_struct(struct usb_device *usb_dev, static int arvo_init_arvo_device_struct(struct usb_device *usb_dev,
struct arvo_device *arvo) struct arvo_device *arvo)
{ {
...@@ -309,7 +312,7 @@ static int arvo_init_specials(struct hid_device *hdev) ...@@ -309,7 +312,7 @@ static int arvo_init_specials(struct hid_device *hdev)
goto exit_free; goto exit_free;
} }
retval = roccat_connect(arvo_class, hdev, retval = roccat_connect(&arvo_class, hdev,
sizeof(struct arvo_roccat_report)); sizeof(struct arvo_roccat_report));
if (retval < 0) { if (retval < 0) {
hid_err(hdev, "couldn't init char dev\n"); hid_err(hdev, "couldn't init char dev\n");
...@@ -433,21 +436,20 @@ static int __init arvo_init(void) ...@@ -433,21 +436,20 @@ static int __init arvo_init(void)
{ {
int retval; int retval;
arvo_class = class_create("arvo"); retval = class_register(&arvo_class);
if (IS_ERR(arvo_class)) if (retval)
return PTR_ERR(arvo_class); return retval;
arvo_class->dev_groups = arvo_groups;
retval = hid_register_driver(&arvo_driver); retval = hid_register_driver(&arvo_driver);
if (retval) if (retval)
class_destroy(arvo_class); class_unregister(&arvo_class);
return retval; return retval;
} }
static void __exit arvo_exit(void) static void __exit arvo_exit(void)
{ {
hid_unregister_driver(&arvo_driver); hid_unregister_driver(&arvo_driver);
class_destroy(arvo_class); class_unregister(&arvo_class);
} }
module_init(arvo_init); module_init(arvo_init);
......
...@@ -23,8 +23,6 @@ ...@@ -23,8 +23,6 @@
#include "hid-roccat-common.h" #include "hid-roccat-common.h"
#include "hid-roccat-isku.h" #include "hid-roccat-isku.h"
static struct class *isku_class;
static void isku_profile_activated(struct isku_device *isku, uint new_profile) static void isku_profile_activated(struct isku_device *isku, uint new_profile)
{ {
isku->actual_profile = new_profile; isku->actual_profile = new_profile;
...@@ -248,6 +246,11 @@ static const struct attribute_group *isku_groups[] = { ...@@ -248,6 +246,11 @@ static const struct attribute_group *isku_groups[] = {
NULL, NULL,
}; };
static const struct class isku_class = {
.name = "isku",
.dev_groups = isku_groups,
};
static int isku_init_isku_device_struct(struct usb_device *usb_dev, static int isku_init_isku_device_struct(struct usb_device *usb_dev,
struct isku_device *isku) struct isku_device *isku)
{ {
...@@ -289,7 +292,7 @@ static int isku_init_specials(struct hid_device *hdev) ...@@ -289,7 +292,7 @@ static int isku_init_specials(struct hid_device *hdev)
goto exit_free; goto exit_free;
} }
retval = roccat_connect(isku_class, hdev, retval = roccat_connect(&isku_class, hdev,
sizeof(struct isku_roccat_report)); sizeof(struct isku_roccat_report));
if (retval < 0) { if (retval < 0) {
hid_err(hdev, "couldn't init char dev\n"); hid_err(hdev, "couldn't init char dev\n");
...@@ -435,21 +438,21 @@ static struct hid_driver isku_driver = { ...@@ -435,21 +438,21 @@ static struct hid_driver isku_driver = {
static int __init isku_init(void) static int __init isku_init(void)
{ {
int retval; int retval;
isku_class = class_create("isku");
if (IS_ERR(isku_class)) retval = class_register(&isku_class);
return PTR_ERR(isku_class); if (retval)
isku_class->dev_groups = isku_groups; return retval;
retval = hid_register_driver(&isku_driver); retval = hid_register_driver(&isku_driver);
if (retval) if (retval)
class_destroy(isku_class); class_unregister(&isku_class);
return retval; return retval;
} }
static void __exit isku_exit(void) static void __exit isku_exit(void)
{ {
hid_unregister_driver(&isku_driver); hid_unregister_driver(&isku_driver);
class_destroy(isku_class); class_unregister(&isku_class);
} }
module_init(isku_init); module_init(isku_init);
......
...@@ -89,9 +89,6 @@ static int kone_send(struct usb_device *usb_dev, uint usb_command, ...@@ -89,9 +89,6 @@ static int kone_send(struct usb_device *usb_dev, uint usb_command,
return ((len < 0) ? len : ((len != size) ? -EIO : 0)); return ((len < 0) ? len : ((len != size) ? -EIO : 0));
} }
/* kone_class is used for creating sysfs attributes via roccat char device */
static struct class *kone_class;
static void kone_set_settings_checksum(struct kone_settings *settings) static void kone_set_settings_checksum(struct kone_settings *settings)
{ {
uint16_t checksum = 0; uint16_t checksum = 0;
...@@ -657,6 +654,12 @@ static const struct attribute_group *kone_groups[] = { ...@@ -657,6 +654,12 @@ static const struct attribute_group *kone_groups[] = {
NULL, NULL,
}; };
/* kone_class is used for creating sysfs attributes via roccat char device */
static const struct class kone_class = {
.name = "kone",
.dev_groups = kone_groups,
};
static int kone_init_kone_device_struct(struct usb_device *usb_dev, static int kone_init_kone_device_struct(struct usb_device *usb_dev,
struct kone_device *kone) struct kone_device *kone)
{ {
...@@ -712,8 +715,8 @@ static int kone_init_specials(struct hid_device *hdev) ...@@ -712,8 +715,8 @@ static int kone_init_specials(struct hid_device *hdev)
goto exit_free; goto exit_free;
} }
retval = roccat_connect(kone_class, hdev, retval = roccat_connect(&kone_class, hdev,
sizeof(struct kone_roccat_report)); sizeof(struct kone_roccat_report));
if (retval < 0) { if (retval < 0) {
hid_err(hdev, "couldn't init char dev\n"); hid_err(hdev, "couldn't init char dev\n");
/* be tolerant about not getting chrdev */ /* be tolerant about not getting chrdev */
...@@ -890,21 +893,20 @@ static int __init kone_init(void) ...@@ -890,21 +893,20 @@ static int __init kone_init(void)
int retval; int retval;
/* class name has to be same as driver name */ /* class name has to be same as driver name */
kone_class = class_create("kone"); retval = class_register(&kone_class);
if (IS_ERR(kone_class)) if (retval)
return PTR_ERR(kone_class); return retval;
kone_class->dev_groups = kone_groups;
retval = hid_register_driver(&kone_driver); retval = hid_register_driver(&kone_driver);
if (retval) if (retval)
class_destroy(kone_class); class_unregister(&kone_class);
return retval; return retval;
} }
static void __exit kone_exit(void) static void __exit kone_exit(void)
{ {
hid_unregister_driver(&kone_driver); hid_unregister_driver(&kone_driver);
class_destroy(kone_class); class_unregister(&kone_class);
} }
module_init(kone_init); module_init(kone_init);
......
...@@ -26,8 +26,6 @@ ...@@ -26,8 +26,6 @@
static uint profile_numbers[5] = {0, 1, 2, 3, 4}; static uint profile_numbers[5] = {0, 1, 2, 3, 4};
static struct class *koneplus_class;
static void koneplus_profile_activated(struct koneplus_device *koneplus, static void koneplus_profile_activated(struct koneplus_device *koneplus,
uint new_profile) uint new_profile)
{ {
...@@ -356,6 +354,11 @@ static const struct attribute_group *koneplus_groups[] = { ...@@ -356,6 +354,11 @@ static const struct attribute_group *koneplus_groups[] = {
NULL, NULL,
}; };
static const struct class koneplus_class = {
.name = "koneplus",
.dev_groups = koneplus_groups,
};
static int koneplus_init_koneplus_device_struct(struct usb_device *usb_dev, static int koneplus_init_koneplus_device_struct(struct usb_device *usb_dev,
struct koneplus_device *koneplus) struct koneplus_device *koneplus)
{ {
...@@ -394,8 +397,8 @@ static int koneplus_init_specials(struct hid_device *hdev) ...@@ -394,8 +397,8 @@ static int koneplus_init_specials(struct hid_device *hdev)
goto exit_free; goto exit_free;
} }
retval = roccat_connect(koneplus_class, hdev, retval = roccat_connect(&koneplus_class, hdev,
sizeof(struct koneplus_roccat_report)); sizeof(struct koneplus_roccat_report));
if (retval < 0) { if (retval < 0) {
hid_err(hdev, "couldn't init char dev\n"); hid_err(hdev, "couldn't init char dev\n");
} else { } else {
...@@ -549,21 +552,20 @@ static int __init koneplus_init(void) ...@@ -549,21 +552,20 @@ static int __init koneplus_init(void)
int retval; int retval;
/* class name has to be same as driver name */ /* class name has to be same as driver name */
koneplus_class = class_create("koneplus"); retval = class_register(&koneplus_class);
if (IS_ERR(koneplus_class)) if (retval)
return PTR_ERR(koneplus_class); return retval;
koneplus_class->dev_groups = koneplus_groups;
retval = hid_register_driver(&koneplus_driver); retval = hid_register_driver(&koneplus_driver);
if (retval) if (retval)
class_destroy(koneplus_class); class_unregister(&koneplus_class);
return retval; return retval;
} }
static void __exit koneplus_exit(void) static void __exit koneplus_exit(void)
{ {
hid_unregister_driver(&koneplus_driver); hid_unregister_driver(&koneplus_driver);
class_destroy(koneplus_class); class_unregister(&koneplus_class);
} }
module_init(koneplus_init); module_init(koneplus_init);
......
...@@ -36,8 +36,6 @@ struct konepure_mouse_report_button { ...@@ -36,8 +36,6 @@ struct konepure_mouse_report_button {
uint8_t unknown[2]; uint8_t unknown[2];
} __packed; } __packed;
static struct class *konepure_class;
ROCCAT_COMMON2_BIN_ATTRIBUTE_W(control, 0x04, 0x03); ROCCAT_COMMON2_BIN_ATTRIBUTE_W(control, 0x04, 0x03);
ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(actual_profile, 0x05, 0x03); ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(actual_profile, 0x05, 0x03);
ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(profile_settings, 0x06, 0x1f); ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(profile_settings, 0x06, 0x1f);
...@@ -72,6 +70,11 @@ static const struct attribute_group *konepure_groups[] = { ...@@ -72,6 +70,11 @@ static const struct attribute_group *konepure_groups[] = {
NULL, NULL,
}; };
static const struct class konepure_class = {
.name = "konepure",
.dev_groups = konepure_groups,
};
static int konepure_init_specials(struct hid_device *hdev) static int konepure_init_specials(struct hid_device *hdev)
{ {
struct usb_interface *intf = to_usb_interface(hdev->dev.parent); struct usb_interface *intf = to_usb_interface(hdev->dev.parent);
...@@ -98,8 +101,8 @@ static int konepure_init_specials(struct hid_device *hdev) ...@@ -98,8 +101,8 @@ static int konepure_init_specials(struct hid_device *hdev)
goto exit_free; goto exit_free;
} }
retval = roccat_connect(konepure_class, hdev, retval = roccat_connect(&konepure_class, hdev,
sizeof(struct konepure_mouse_report_button)); sizeof(struct konepure_mouse_report_button));
if (retval < 0) { if (retval < 0) {
hid_err(hdev, "couldn't init char dev\n"); hid_err(hdev, "couldn't init char dev\n");
} else { } else {
...@@ -207,21 +210,20 @@ static int __init konepure_init(void) ...@@ -207,21 +210,20 @@ static int __init konepure_init(void)
{ {
int retval; int retval;
konepure_class = class_create("konepure"); retval = class_register(&konepure_class);
if (IS_ERR(konepure_class)) if (retval)
return PTR_ERR(konepure_class); return retval;
konepure_class->dev_groups = konepure_groups;
retval = hid_register_driver(&konepure_driver); retval = hid_register_driver(&konepure_driver);
if (retval) if (retval)
class_destroy(konepure_class); class_unregister(&konepure_class);
return retval; return retval;
} }
static void __exit konepure_exit(void) static void __exit konepure_exit(void)
{ {
hid_unregister_driver(&konepure_driver); hid_unregister_driver(&konepure_driver);
class_destroy(konepure_class); class_unregister(&konepure_class);
} }
module_init(konepure_init); module_init(konepure_init);
......
...@@ -24,8 +24,6 @@ ...@@ -24,8 +24,6 @@
static uint profile_numbers[5] = {0, 1, 2, 3, 4}; static uint profile_numbers[5] = {0, 1, 2, 3, 4};
static struct class *kovaplus_class;
static uint kovaplus_convert_event_cpi(uint value) static uint kovaplus_convert_event_cpi(uint value)
{ {
return (value == 7 ? 4 : (value == 4 ? 3 : value)); return (value == 7 ? 4 : (value == 4 ? 3 : value));
...@@ -409,6 +407,11 @@ static const struct attribute_group *kovaplus_groups[] = { ...@@ -409,6 +407,11 @@ static const struct attribute_group *kovaplus_groups[] = {
NULL, NULL,
}; };
static const struct class kovaplus_class = {
.name = "kovaplus",
.dev_groups = kovaplus_groups,
};
static int kovaplus_init_kovaplus_device_struct(struct usb_device *usb_dev, static int kovaplus_init_kovaplus_device_struct(struct usb_device *usb_dev,
struct kovaplus_device *kovaplus) struct kovaplus_device *kovaplus)
{ {
...@@ -463,8 +466,8 @@ static int kovaplus_init_specials(struct hid_device *hdev) ...@@ -463,8 +466,8 @@ static int kovaplus_init_specials(struct hid_device *hdev)
goto exit_free; goto exit_free;
} }
retval = roccat_connect(kovaplus_class, hdev, retval = roccat_connect(&kovaplus_class, hdev,
sizeof(struct kovaplus_roccat_report)); sizeof(struct kovaplus_roccat_report));
if (retval < 0) { if (retval < 0) {
hid_err(hdev, "couldn't init char dev\n"); hid_err(hdev, "couldn't init char dev\n");
} else { } else {
...@@ -638,21 +641,20 @@ static int __init kovaplus_init(void) ...@@ -638,21 +641,20 @@ static int __init kovaplus_init(void)
{ {
int retval; int retval;
kovaplus_class = class_create("kovaplus"); retval = class_register(&kovaplus_class);
if (IS_ERR(kovaplus_class)) if (retval)
return PTR_ERR(kovaplus_class); return retval;
kovaplus_class->dev_groups = kovaplus_groups;
retval = hid_register_driver(&kovaplus_driver); retval = hid_register_driver(&kovaplus_driver);
if (retval) if (retval)
class_destroy(kovaplus_class); class_unregister(&kovaplus_class);
return retval; return retval;
} }
static void __exit kovaplus_exit(void) static void __exit kovaplus_exit(void)
{ {
hid_unregister_driver(&kovaplus_driver); hid_unregister_driver(&kovaplus_driver);
class_destroy(kovaplus_class); class_unregister(&kovaplus_class);
} }
module_init(kovaplus_init); module_init(kovaplus_init);
......
...@@ -26,9 +26,6 @@ ...@@ -26,9 +26,6 @@
static uint profile_numbers[5] = {0, 1, 2, 3, 4}; static uint profile_numbers[5] = {0, 1, 2, 3, 4};
/* pyra_class is used for creating sysfs attributes via roccat char device */
static struct class *pyra_class;
static void profile_activated(struct pyra_device *pyra, static void profile_activated(struct pyra_device *pyra,
unsigned int new_profile) unsigned int new_profile)
{ {
...@@ -366,6 +363,12 @@ static const struct attribute_group *pyra_groups[] = { ...@@ -366,6 +363,12 @@ static const struct attribute_group *pyra_groups[] = {
NULL, NULL,
}; };
/* pyra_class is used for creating sysfs attributes via roccat char device */
static const struct class pyra_class = {
.name = "pyra",
.dev_groups = pyra_groups,
};
static int pyra_init_pyra_device_struct(struct usb_device *usb_dev, static int pyra_init_pyra_device_struct(struct usb_device *usb_dev,
struct pyra_device *pyra) struct pyra_device *pyra)
{ {
...@@ -413,7 +416,7 @@ static int pyra_init_specials(struct hid_device *hdev) ...@@ -413,7 +416,7 @@ static int pyra_init_specials(struct hid_device *hdev)
goto exit_free; goto exit_free;
} }
retval = roccat_connect(pyra_class, hdev, retval = roccat_connect(&pyra_class, hdev,
sizeof(struct pyra_roccat_report)); sizeof(struct pyra_roccat_report));
if (retval < 0) { if (retval < 0) {
hid_err(hdev, "couldn't init char dev\n"); hid_err(hdev, "couldn't init char dev\n");
...@@ -585,21 +588,20 @@ static int __init pyra_init(void) ...@@ -585,21 +588,20 @@ static int __init pyra_init(void)
int retval; int retval;
/* class name has to be same as driver name */ /* class name has to be same as driver name */
pyra_class = class_create("pyra"); retval = class_register(&pyra_class);
if (IS_ERR(pyra_class)) if (retval)
return PTR_ERR(pyra_class); return retval;
pyra_class->dev_groups = pyra_groups;
retval = hid_register_driver(&pyra_driver); retval = hid_register_driver(&pyra_driver);
if (retval) if (retval)
class_destroy(pyra_class); class_unregister(&pyra_class);
return retval; return retval;
} }
static void __exit pyra_exit(void) static void __exit pyra_exit(void)
{ {
hid_unregister_driver(&pyra_driver); hid_unregister_driver(&pyra_driver);
class_destroy(pyra_class); class_unregister(&pyra_class);
} }
module_init(pyra_init); module_init(pyra_init);
......
...@@ -28,8 +28,6 @@ struct ryos_report_special { ...@@ -28,8 +28,6 @@ struct ryos_report_special {
uint8_t data[4]; uint8_t data[4];
} __packed; } __packed;
static struct class *ryos_class;
ROCCAT_COMMON2_BIN_ATTRIBUTE_W(control, 0x04, 0x03); ROCCAT_COMMON2_BIN_ATTRIBUTE_W(control, 0x04, 0x03);
ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(profile, 0x05, 0x03); ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(profile, 0x05, 0x03);
ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(keys_primary, 0x06, 0x7d); ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(keys_primary, 0x06, 0x7d);
...@@ -80,6 +78,11 @@ static const struct attribute_group *ryos_groups[] = { ...@@ -80,6 +78,11 @@ static const struct attribute_group *ryos_groups[] = {
NULL, NULL,
}; };
static const struct class ryos_class = {
.name = "ryos",
.dev_groups = ryos_groups,
};
static int ryos_init_specials(struct hid_device *hdev) static int ryos_init_specials(struct hid_device *hdev)
{ {
struct usb_interface *intf = to_usb_interface(hdev->dev.parent); struct usb_interface *intf = to_usb_interface(hdev->dev.parent);
...@@ -106,7 +109,7 @@ static int ryos_init_specials(struct hid_device *hdev) ...@@ -106,7 +109,7 @@ static int ryos_init_specials(struct hid_device *hdev)
goto exit_free; goto exit_free;
} }
retval = roccat_connect(ryos_class, hdev, retval = roccat_connect(&ryos_class, hdev,
sizeof(struct ryos_report_special)); sizeof(struct ryos_report_special));
if (retval < 0) { if (retval < 0) {
hid_err(hdev, "couldn't init char dev\n"); hid_err(hdev, "couldn't init char dev\n");
...@@ -216,21 +219,20 @@ static int __init ryos_init(void) ...@@ -216,21 +219,20 @@ static int __init ryos_init(void)
{ {
int retval; int retval;
ryos_class = class_create("ryos"); retval = class_register(&ryos_class);
if (IS_ERR(ryos_class)) if (retval)
return PTR_ERR(ryos_class); return retval;
ryos_class->dev_groups = ryos_groups;
retval = hid_register_driver(&ryos_driver); retval = hid_register_driver(&ryos_driver);
if (retval) if (retval)
class_destroy(ryos_class); class_unregister(&ryos_class);
return retval; return retval;
} }
static void __exit ryos_exit(void) static void __exit ryos_exit(void)
{ {
hid_unregister_driver(&ryos_driver); hid_unregister_driver(&ryos_driver);
class_destroy(ryos_class); class_unregister(&ryos_class);
} }
module_init(ryos_init); module_init(ryos_init);
......
...@@ -22,8 +22,6 @@ ...@@ -22,8 +22,6 @@
#include "hid-roccat-common.h" #include "hid-roccat-common.h"
#include "hid-roccat-savu.h" #include "hid-roccat-savu.h"
static struct class *savu_class;
ROCCAT_COMMON2_BIN_ATTRIBUTE_W(control, 0x4, 0x03); ROCCAT_COMMON2_BIN_ATTRIBUTE_W(control, 0x4, 0x03);
ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(profile, 0x5, 0x03); ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(profile, 0x5, 0x03);
ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(general, 0x6, 0x10); ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(general, 0x6, 0x10);
...@@ -52,6 +50,11 @@ static const struct attribute_group *savu_groups[] = { ...@@ -52,6 +50,11 @@ static const struct attribute_group *savu_groups[] = {
NULL, NULL,
}; };
static const struct class savu_class = {
.name = "savu",
.dev_groups = savu_groups,
};
static int savu_init_specials(struct hid_device *hdev) static int savu_init_specials(struct hid_device *hdev)
{ {
struct usb_interface *intf = to_usb_interface(hdev->dev.parent); struct usb_interface *intf = to_usb_interface(hdev->dev.parent);
...@@ -78,7 +81,7 @@ static int savu_init_specials(struct hid_device *hdev) ...@@ -78,7 +81,7 @@ static int savu_init_specials(struct hid_device *hdev)
goto exit_free; goto exit_free;
} }
retval = roccat_connect(savu_class, hdev, retval = roccat_connect(&savu_class, hdev,
sizeof(struct savu_roccat_report)); sizeof(struct savu_roccat_report));
if (retval < 0) { if (retval < 0) {
hid_err(hdev, "couldn't init char dev\n"); hid_err(hdev, "couldn't init char dev\n");
...@@ -204,21 +207,20 @@ static int __init savu_init(void) ...@@ -204,21 +207,20 @@ static int __init savu_init(void)
{ {
int retval; int retval;
savu_class = class_create("savu"); retval = class_register(&savu_class);
if (IS_ERR(savu_class)) if (retval)
return PTR_ERR(savu_class); return retval;
savu_class->dev_groups = savu_groups;
retval = hid_register_driver(&savu_driver); retval = hid_register_driver(&savu_driver);
if (retval) if (retval)
class_destroy(savu_class); class_unregister(&savu_class);
return retval; return retval;
} }
static void __exit savu_exit(void) static void __exit savu_exit(void)
{ {
hid_unregister_driver(&savu_driver); hid_unregister_driver(&savu_driver);
class_destroy(savu_class); class_unregister(&savu_class);
} }
module_init(savu_init); module_init(savu_init);
......
...@@ -295,7 +295,7 @@ EXPORT_SYMBOL_GPL(roccat_report_event); ...@@ -295,7 +295,7 @@ EXPORT_SYMBOL_GPL(roccat_report_event);
* Return value is minor device number in Range [0, ROCCAT_MAX_DEVICES] on * Return value is minor device number in Range [0, ROCCAT_MAX_DEVICES] on
* success, a negative error code on failure. * success, a negative error code on failure.
*/ */
int roccat_connect(struct class *klass, struct hid_device *hid, int report_size) int roccat_connect(const struct class *klass, struct hid_device *hid, int report_size)
{ {
unsigned int minor; unsigned int minor;
struct roccat_device *device; struct roccat_device *device;
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
#ifdef __KERNEL__ #ifdef __KERNEL__
int roccat_connect(struct class *klass, struct hid_device *hid, int roccat_connect(const struct class *klass, struct hid_device *hid,
int report_size); int report_size);
void roccat_disconnect(int minor); void roccat_disconnect(int minor);
int roccat_report_event(int minor, u8 const *data); int roccat_report_event(int minor, u8 const *data);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment