Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) #ifndef __HID_ROCCAT_COMMON_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3) #define __HID_ROCCAT_COMMON_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6)  * Copyright (c) 2011 Stefan Achatz <erazor_de@users.sourceforge.net>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <linux/usb.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) enum roccat_common2_commands {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) 	ROCCAT_COMMON_COMMAND_CONTROL = 0x4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) struct roccat_common2_control {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) 	uint8_t command;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 	uint8_t value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 	uint8_t request; /* always 0 on requesting write check */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) int roccat_common2_receive(struct usb_device *usb_dev, uint report_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 		void *data, uint size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) int roccat_common2_send(struct usb_device *usb_dev, uint report_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 		void const *data, uint size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) int roccat_common2_send_with_status(struct usb_device *usb_dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 		uint command, void const *buf, uint size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) struct roccat_common2_device {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 	int roccat_claimed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 	int chrdev_minor;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 	struct mutex lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) int roccat_common2_device_init_struct(struct usb_device *usb_dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 		struct roccat_common2_device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) ssize_t roccat_common2_sysfs_read(struct file *fp, struct kobject *kobj,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 		char *buf, loff_t off, size_t count,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 		size_t real_size, uint command);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) ssize_t roccat_common2_sysfs_write(struct file *fp, struct kobject *kobj,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 		void const *buf, loff_t off, size_t count,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 		size_t real_size, uint command);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define ROCCAT_COMMON2_SYSFS_W(thingy, COMMAND, SIZE) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) static ssize_t roccat_common2_sysfs_write_ ## thingy(struct file *fp, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 		struct kobject *kobj, struct bin_attribute *attr, char *buf, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 		loff_t off, size_t count) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 	return roccat_common2_sysfs_write(fp, kobj, buf, off, count, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 			SIZE, COMMAND); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define ROCCAT_COMMON2_SYSFS_R(thingy, COMMAND, SIZE) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) static ssize_t roccat_common2_sysfs_read_ ## thingy(struct file *fp, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) 		struct kobject *kobj, struct bin_attribute *attr, char *buf, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 		loff_t off, size_t count) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 	return roccat_common2_sysfs_read(fp, kobj, buf, off, count, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 			SIZE, COMMAND); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #define ROCCAT_COMMON2_SYSFS_RW(thingy, COMMAND, SIZE) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) ROCCAT_COMMON2_SYSFS_W(thingy, COMMAND, SIZE) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) ROCCAT_COMMON2_SYSFS_R(thingy, COMMAND, SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) #define ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(thingy, COMMAND, SIZE) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) ROCCAT_COMMON2_SYSFS_RW(thingy, COMMAND, SIZE); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) static struct bin_attribute bin_attr_ ## thingy = { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) 	.attr = { .name = #thingy, .mode = 0660 }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) 	.size = SIZE, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) 	.read = roccat_common2_sysfs_read_ ## thingy, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) 	.write = roccat_common2_sysfs_write_ ## thingy \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define ROCCAT_COMMON2_BIN_ATTRIBUTE_R(thingy, COMMAND, SIZE) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) ROCCAT_COMMON2_SYSFS_R(thingy, COMMAND, SIZE); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) static struct bin_attribute bin_attr_ ## thingy = { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) 	.attr = { .name = #thingy, .mode = 0440 }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) 	.size = SIZE, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) 	.read = roccat_common2_sysfs_read_ ## thingy, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) #define ROCCAT_COMMON2_BIN_ATTRIBUTE_W(thingy, COMMAND, SIZE) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) ROCCAT_COMMON2_SYSFS_W(thingy, COMMAND, SIZE); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) static struct bin_attribute bin_attr_ ## thingy = { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) 	.attr = { .name = #thingy, .mode = 0220 }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) 	.size = SIZE, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) 	.write = roccat_common2_sysfs_write_ ## thingy \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) #endif