Source
25
25
uint8_t request; /* always 0 on requesting write check */
26
26
} __packed;
27
27
28
28
int roccat_common2_receive(struct usb_device *usb_dev, uint report_id,
29
29
void *data, uint size);
30
30
int roccat_common2_send(struct usb_device *usb_dev, uint report_id,
31
31
void const *data, uint size);
32
32
int roccat_common2_send_with_status(struct usb_device *usb_dev,
33
33
uint command, void const *buf, uint size);
34
34
35
+
struct roccat_common2_device {
36
+
int roccat_claimed;
37
+
int chrdev_minor;
38
+
struct mutex lock;
39
+
};
40
+
41
+
int roccat_common2_device_init_struct(struct usb_device *usb_dev,
42
+
struct roccat_common2_device *dev);
43
+
ssize_t roccat_common2_sysfs_read(struct file *fp, struct kobject *kobj,
44
+
char *buf, loff_t off, size_t count,
45
+
size_t real_size, uint command);
46
+
ssize_t roccat_common2_sysfs_write(struct file *fp, struct kobject *kobj,
47
+
void const *buf, loff_t off, size_t count,
48
+
size_t real_size, uint command);
49
+
50
+
#define ROCCAT_COMMON2_SYSFS_W(thingy, COMMAND, SIZE) \
51
+
static ssize_t roccat_common2_sysfs_write_ ## thingy(struct file *fp, \
52
+
struct kobject *kobj, struct bin_attribute *attr, char *buf, \
53
+
loff_t off, size_t count) \
54
+
{ \
55
+
return roccat_common2_sysfs_write(fp, kobj, buf, off, count, \
56
+
SIZE, COMMAND); \
57
+
}
58
+
59
+
#define ROCCAT_COMMON2_SYSFS_R(thingy, COMMAND, SIZE) \
60
+
static ssize_t roccat_common2_sysfs_read_ ## thingy(struct file *fp, \
61
+
struct kobject *kobj, struct bin_attribute *attr, char *buf, \
62
+
loff_t off, size_t count) \
63
+
{ \
64
+
return roccat_common2_sysfs_read(fp, kobj, buf, off, count, \
65
+
SIZE, COMMAND); \
66
+
}
67
+
68
+
#define ROCCAT_COMMON2_SYSFS_RW(thingy, COMMAND, SIZE) \
69
+
ROCCAT_COMMON2_SYSFS_W(thingy, COMMAND, SIZE) \
70
+
ROCCAT_COMMON2_SYSFS_R(thingy, COMMAND, SIZE)
71
+
72
+
#define ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(thingy, COMMAND, SIZE) \
73
+
ROCCAT_COMMON2_SYSFS_RW(thingy, COMMAND, SIZE); \
74
+
static struct bin_attribute bin_attr_ ## thingy = { \
75
+
.attr = { .name = #thingy, .mode = 0660 }, \
76
+
.size = SIZE, \
77
+
.read = roccat_common2_sysfs_read_ ## thingy, \
78
+
.write = roccat_common2_sysfs_write_ ## thingy \
79
+
}
80
+
81
+
#define ROCCAT_COMMON2_BIN_ATTRIBUTE_R(thingy, COMMAND, SIZE) \
82
+
ROCCAT_COMMON2_SYSFS_R(thingy, COMMAND, SIZE); \
83
+
static struct bin_attribute bin_attr_ ## thingy = { \
84
+
.attr = { .name = #thingy, .mode = 0440 }, \
85
+
.size = SIZE, \
86
+
.read = roccat_common2_sysfs_read_ ## thingy, \
87
+
}
88
+
89
+
#define ROCCAT_COMMON2_BIN_ATTRIBUTE_W(thingy, COMMAND, SIZE) \
90
+
ROCCAT_COMMON2_SYSFS_W(thingy, COMMAND, SIZE); \
91
+
static struct bin_attribute bin_attr_ ## thingy = { \
92
+
.attr = { .name = #thingy, .mode = 0220 }, \
93
+
.size = SIZE, \
94
+
.write = roccat_common2_sysfs_write_ ## thingy \
95
+
}
96
+
35
97
#endif