mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2024-12-28 16:52:18 +00:00
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git
This commit is contained in:
commit
2d144c87f2
@ -2174,9 +2174,9 @@ static bool hid_hiddev(struct hid_device *hdev)
|
||||
|
||||
|
||||
static ssize_t
|
||||
read_report_descriptor(struct file *filp, struct kobject *kobj,
|
||||
struct bin_attribute *attr,
|
||||
char *buf, loff_t off, size_t count)
|
||||
report_descriptor_read(struct file *filp, struct kobject *kobj,
|
||||
const struct bin_attribute *attr,
|
||||
char *buf, loff_t off, size_t count)
|
||||
{
|
||||
struct device *dev = kobj_to_dev(kobj);
|
||||
struct hid_device *hdev = to_hid_device(dev);
|
||||
@ -2193,24 +2193,17 @@ read_report_descriptor(struct file *filp, struct kobject *kobj,
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
show_country(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
country_show(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct hid_device *hdev = to_hid_device(dev);
|
||||
|
||||
return sprintf(buf, "%02x\n", hdev->country & 0xff);
|
||||
}
|
||||
|
||||
static struct bin_attribute dev_bin_attr_report_desc = {
|
||||
.attr = { .name = "report_descriptor", .mode = 0444 },
|
||||
.read = read_report_descriptor,
|
||||
.size = HID_MAX_DESCRIPTOR_SIZE,
|
||||
};
|
||||
static const BIN_ATTR_RO(report_descriptor, HID_MAX_DESCRIPTOR_SIZE);
|
||||
|
||||
static const struct device_attribute dev_attr_country = {
|
||||
.attr = { .name = "country", .mode = 0444 },
|
||||
.show = show_country,
|
||||
};
|
||||
static const DEVICE_ATTR_RO(country);
|
||||
|
||||
int hid_connect(struct hid_device *hdev, unsigned int connect_mask)
|
||||
{
|
||||
@ -2800,13 +2793,13 @@ static struct attribute *hid_dev_attrs[] = {
|
||||
&dev_attr_modalias.attr,
|
||||
NULL,
|
||||
};
|
||||
static struct bin_attribute *hid_dev_bin_attrs[] = {
|
||||
&dev_bin_attr_report_desc,
|
||||
static const struct bin_attribute *hid_dev_bin_attrs[] = {
|
||||
&bin_attr_report_descriptor,
|
||||
NULL
|
||||
};
|
||||
static const struct attribute_group hid_dev_group = {
|
||||
.attrs = hid_dev_attrs,
|
||||
.bin_attrs = hid_dev_bin_attrs,
|
||||
.bin_attrs_new = hid_dev_bin_attrs,
|
||||
};
|
||||
__ATTRIBUTE_GROUPS(hid_dev);
|
||||
|
||||
|
@ -506,7 +506,6 @@
|
||||
#define USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_E100 0xe100
|
||||
|
||||
#define I2C_VENDOR_ID_GOODIX 0x27c6
|
||||
#define I2C_DEVICE_ID_GOODIX_01E0 0x01e0
|
||||
#define I2C_DEVICE_ID_GOODIX_01E8 0x01e8
|
||||
#define I2C_DEVICE_ID_GOODIX_01E9 0x01e9
|
||||
#define I2C_DEVICE_ID_GOODIX_01F0 0x01f0
|
||||
@ -1089,6 +1088,8 @@
|
||||
#define USB_VENDOR_ID_PRODIGE 0x05af
|
||||
#define USB_DEVICE_ID_PRODIGE_CORDLESS 0x3062
|
||||
|
||||
#define I2C_VENDOR_ID_QTEC 0x6243
|
||||
|
||||
#define USB_VENDOR_ID_QUANTA 0x0408
|
||||
#define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH 0x3000
|
||||
#define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001 0x3001
|
||||
|
@ -1460,8 +1460,7 @@ static const __u8 *mt_report_fixup(struct hid_device *hdev, __u8 *rdesc,
|
||||
{
|
||||
if (hdev->vendor == I2C_VENDOR_ID_GOODIX &&
|
||||
(hdev->product == I2C_DEVICE_ID_GOODIX_01E8 ||
|
||||
hdev->product == I2C_DEVICE_ID_GOODIX_01E9 ||
|
||||
hdev->product == I2C_DEVICE_ID_GOODIX_01E0)) {
|
||||
hdev->product == I2C_DEVICE_ID_GOODIX_01E9)) {
|
||||
if (rdesc[607] == 0x15) {
|
||||
rdesc[607] = 0x25;
|
||||
dev_info(
|
||||
@ -2086,9 +2085,6 @@ static const struct hid_device_id mt_devices[] = {
|
||||
{ .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU,
|
||||
HID_DEVICE(BUS_I2C, HID_GROUP_ANY, I2C_VENDOR_ID_GOODIX,
|
||||
I2C_DEVICE_ID_GOODIX_01E9) },
|
||||
{ .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU,
|
||||
HID_DEVICE(BUS_I2C, HID_GROUP_ANY, I2C_VENDOR_ID_GOODIX,
|
||||
I2C_DEVICE_ID_GOODIX_01E0) },
|
||||
|
||||
/* GoodTouch panels */
|
||||
{ .driver_data = MT_CLS_NSMU,
|
||||
|
@ -224,24 +224,24 @@ static ssize_t arvo_sysfs_read(struct file *fp,
|
||||
}
|
||||
|
||||
static ssize_t arvo_sysfs_write_button(struct file *fp,
|
||||
struct kobject *kobj, struct bin_attribute *attr, char *buf,
|
||||
loff_t off, size_t count)
|
||||
struct kobject *kobj, const struct bin_attribute *attr,
|
||||
char *buf, loff_t off, size_t count)
|
||||
{
|
||||
return arvo_sysfs_write(fp, kobj, buf, off, count,
|
||||
sizeof(struct arvo_button), ARVO_COMMAND_BUTTON);
|
||||
}
|
||||
static BIN_ATTR(button, 0220, NULL, arvo_sysfs_write_button,
|
||||
sizeof(struct arvo_button));
|
||||
static const BIN_ATTR(button, 0220, NULL, arvo_sysfs_write_button,
|
||||
sizeof(struct arvo_button));
|
||||
|
||||
static ssize_t arvo_sysfs_read_info(struct file *fp,
|
||||
struct kobject *kobj, struct bin_attribute *attr, char *buf,
|
||||
loff_t off, size_t count)
|
||||
struct kobject *kobj, const struct bin_attribute *attr,
|
||||
char *buf, loff_t off, size_t count)
|
||||
{
|
||||
return arvo_sysfs_read(fp, kobj, buf, off, count,
|
||||
sizeof(struct arvo_info), ARVO_COMMAND_INFO);
|
||||
}
|
||||
static BIN_ATTR(info, 0440, arvo_sysfs_read_info, NULL,
|
||||
sizeof(struct arvo_info));
|
||||
static const BIN_ATTR(info, 0440, arvo_sysfs_read_info, NULL,
|
||||
sizeof(struct arvo_info));
|
||||
|
||||
static struct attribute *arvo_attrs[] = {
|
||||
&dev_attr_mode_key.attr,
|
||||
@ -250,7 +250,7 @@ static struct attribute *arvo_attrs[] = {
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct bin_attribute *arvo_bin_attributes[] = {
|
||||
static const struct bin_attribute *const arvo_bin_attributes[] = {
|
||||
&bin_attr_button,
|
||||
&bin_attr_info,
|
||||
NULL,
|
||||
@ -258,7 +258,7 @@ static struct bin_attribute *arvo_bin_attributes[] = {
|
||||
|
||||
static const struct attribute_group arvo_group = {
|
||||
.attrs = arvo_attrs,
|
||||
.bin_attrs = arvo_bin_attributes,
|
||||
.bin_attrs_new = arvo_bin_attributes,
|
||||
};
|
||||
|
||||
static const struct attribute_group *arvo_groups[] = {
|
||||
|
@ -46,8 +46,8 @@ ssize_t roccat_common2_sysfs_write(struct file *fp, struct kobject *kobj,
|
||||
|
||||
#define ROCCAT_COMMON2_SYSFS_W(thingy, COMMAND, SIZE) \
|
||||
static ssize_t roccat_common2_sysfs_write_ ## thingy(struct file *fp, \
|
||||
struct kobject *kobj, struct bin_attribute *attr, char *buf, \
|
||||
loff_t off, size_t count) \
|
||||
struct kobject *kobj, const struct bin_attribute *attr, \
|
||||
char *buf, loff_t off, size_t count) \
|
||||
{ \
|
||||
return roccat_common2_sysfs_write(fp, kobj, buf, off, count, \
|
||||
SIZE, COMMAND); \
|
||||
@ -55,8 +55,8 @@ static ssize_t roccat_common2_sysfs_write_ ## thingy(struct file *fp, \
|
||||
|
||||
#define ROCCAT_COMMON2_SYSFS_R(thingy, COMMAND, SIZE) \
|
||||
static ssize_t roccat_common2_sysfs_read_ ## thingy(struct file *fp, \
|
||||
struct kobject *kobj, struct bin_attribute *attr, char *buf, \
|
||||
loff_t off, size_t count) \
|
||||
struct kobject *kobj, const struct bin_attribute *attr, \
|
||||
char *buf, loff_t off, size_t count) \
|
||||
{ \
|
||||
return roccat_common2_sysfs_read(fp, kobj, buf, off, count, \
|
||||
SIZE, COMMAND); \
|
||||
@ -68,27 +68,27 @@ ROCCAT_COMMON2_SYSFS_R(thingy, COMMAND, SIZE)
|
||||
|
||||
#define ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(thingy, COMMAND, SIZE) \
|
||||
ROCCAT_COMMON2_SYSFS_RW(thingy, COMMAND, SIZE); \
|
||||
static struct bin_attribute bin_attr_ ## thingy = { \
|
||||
static const struct bin_attribute bin_attr_ ## thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0660 }, \
|
||||
.size = SIZE, \
|
||||
.read = roccat_common2_sysfs_read_ ## thingy, \
|
||||
.write = roccat_common2_sysfs_write_ ## thingy \
|
||||
.read_new = roccat_common2_sysfs_read_ ## thingy, \
|
||||
.write_new = roccat_common2_sysfs_write_ ## thingy \
|
||||
}
|
||||
|
||||
#define ROCCAT_COMMON2_BIN_ATTRIBUTE_R(thingy, COMMAND, SIZE) \
|
||||
ROCCAT_COMMON2_SYSFS_R(thingy, COMMAND, SIZE); \
|
||||
static struct bin_attribute bin_attr_ ## thingy = { \
|
||||
static const struct bin_attribute bin_attr_ ## thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0440 }, \
|
||||
.size = SIZE, \
|
||||
.read = roccat_common2_sysfs_read_ ## thingy, \
|
||||
.read_new = roccat_common2_sysfs_read_ ## thingy, \
|
||||
}
|
||||
|
||||
#define ROCCAT_COMMON2_BIN_ATTRIBUTE_W(thingy, COMMAND, SIZE) \
|
||||
ROCCAT_COMMON2_SYSFS_W(thingy, COMMAND, SIZE); \
|
||||
static struct bin_attribute bin_attr_ ## thingy = { \
|
||||
static const struct bin_attribute bin_attr_ ## thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0220 }, \
|
||||
.size = SIZE, \
|
||||
.write = roccat_common2_sysfs_write_ ## thingy \
|
||||
.write_new = roccat_common2_sysfs_write_ ## thingy \
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -156,7 +156,7 @@ static ssize_t isku_sysfs_write(struct file *fp, struct kobject *kobj,
|
||||
|
||||
#define ISKU_SYSFS_W(thingy, THINGY) \
|
||||
static ssize_t isku_sysfs_write_ ## thingy(struct file *fp, struct kobject *kobj, \
|
||||
struct bin_attribute *attr, char *buf, \
|
||||
const struct bin_attribute *attr, char *buf, \
|
||||
loff_t off, size_t count) \
|
||||
{ \
|
||||
return isku_sysfs_write(fp, kobj, buf, off, count, \
|
||||
@ -165,7 +165,7 @@ static ssize_t isku_sysfs_write_ ## thingy(struct file *fp, struct kobject *kobj
|
||||
|
||||
#define ISKU_SYSFS_R(thingy, THINGY) \
|
||||
static ssize_t isku_sysfs_read_ ## thingy(struct file *fp, struct kobject *kobj, \
|
||||
struct bin_attribute *attr, char *buf, \
|
||||
const struct bin_attribute *attr, char *buf, \
|
||||
loff_t off, size_t count) \
|
||||
{ \
|
||||
return isku_sysfs_read(fp, kobj, buf, off, count, \
|
||||
@ -178,27 +178,27 @@ ISKU_SYSFS_W(thingy, THINGY)
|
||||
|
||||
#define ISKU_BIN_ATTR_RW(thingy, THINGY) \
|
||||
ISKU_SYSFS_RW(thingy, THINGY); \
|
||||
static struct bin_attribute bin_attr_##thingy = { \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0660 }, \
|
||||
.size = ISKU_SIZE_ ## THINGY, \
|
||||
.read = isku_sysfs_read_ ## thingy, \
|
||||
.write = isku_sysfs_write_ ## thingy \
|
||||
.read_new = isku_sysfs_read_ ## thingy, \
|
||||
.write_new = isku_sysfs_write_ ## thingy \
|
||||
}
|
||||
|
||||
#define ISKU_BIN_ATTR_R(thingy, THINGY) \
|
||||
ISKU_SYSFS_R(thingy, THINGY); \
|
||||
static struct bin_attribute bin_attr_##thingy = { \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0440 }, \
|
||||
.size = ISKU_SIZE_ ## THINGY, \
|
||||
.read = isku_sysfs_read_ ## thingy, \
|
||||
.read_new = isku_sysfs_read_ ## thingy, \
|
||||
}
|
||||
|
||||
#define ISKU_BIN_ATTR_W(thingy, THINGY) \
|
||||
ISKU_SYSFS_W(thingy, THINGY); \
|
||||
static struct bin_attribute bin_attr_##thingy = { \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0220 }, \
|
||||
.size = ISKU_SIZE_ ## THINGY, \
|
||||
.write = isku_sysfs_write_ ## thingy \
|
||||
.write_new = isku_sysfs_write_ ## thingy \
|
||||
}
|
||||
|
||||
ISKU_BIN_ATTR_RW(macro, MACRO);
|
||||
@ -217,7 +217,7 @@ ISKU_BIN_ATTR_W(control, CONTROL);
|
||||
ISKU_BIN_ATTR_W(reset, RESET);
|
||||
ISKU_BIN_ATTR_R(info, INFO);
|
||||
|
||||
static struct bin_attribute *isku_bin_attributes[] = {
|
||||
static const struct bin_attribute *const isku_bin_attributes[] = {
|
||||
&bin_attr_macro,
|
||||
&bin_attr_keys_function,
|
||||
&bin_attr_keys_easyzone,
|
||||
@ -238,7 +238,7 @@ static struct bin_attribute *isku_bin_attributes[] = {
|
||||
|
||||
static const struct attribute_group isku_group = {
|
||||
.attrs = isku_attrs,
|
||||
.bin_attrs = isku_bin_attributes,
|
||||
.bin_attrs_new = isku_bin_attributes,
|
||||
};
|
||||
|
||||
static const struct attribute_group *isku_groups[] = {
|
||||
|
@ -261,7 +261,7 @@ static int kone_get_firmware_version(struct usb_device *usb_dev, int *result)
|
||||
}
|
||||
|
||||
static ssize_t kone_sysfs_read_settings(struct file *fp, struct kobject *kobj,
|
||||
struct bin_attribute *attr, char *buf,
|
||||
const struct bin_attribute *attr, char *buf,
|
||||
loff_t off, size_t count) {
|
||||
struct device *dev = kobj_to_dev(kobj)->parent->parent;
|
||||
struct kone_device *kone = hid_get_drvdata(dev_get_drvdata(dev));
|
||||
@ -285,7 +285,7 @@ static ssize_t kone_sysfs_read_settings(struct file *fp, struct kobject *kobj,
|
||||
* case of error the old data is still valid
|
||||
*/
|
||||
static ssize_t kone_sysfs_write_settings(struct file *fp, struct kobject *kobj,
|
||||
struct bin_attribute *attr, char *buf,
|
||||
const struct bin_attribute *attr, char *buf,
|
||||
loff_t off, size_t count) {
|
||||
struct device *dev = kobj_to_dev(kobj)->parent->parent;
|
||||
struct kone_device *kone = hid_get_drvdata(dev_get_drvdata(dev));
|
||||
@ -327,11 +327,11 @@ static ssize_t kone_sysfs_write_settings(struct file *fp, struct kobject *kobj,
|
||||
|
||||
return sizeof(struct kone_settings);
|
||||
}
|
||||
static BIN_ATTR(settings, 0660, kone_sysfs_read_settings,
|
||||
kone_sysfs_write_settings, sizeof(struct kone_settings));
|
||||
static const BIN_ATTR(settings, 0660, kone_sysfs_read_settings,
|
||||
kone_sysfs_write_settings, sizeof(struct kone_settings));
|
||||
|
||||
static ssize_t kone_sysfs_read_profilex(struct file *fp,
|
||||
struct kobject *kobj, struct bin_attribute *attr,
|
||||
struct kobject *kobj, const struct bin_attribute *attr,
|
||||
char *buf, loff_t off, size_t count) {
|
||||
struct device *dev = kobj_to_dev(kobj)->parent->parent;
|
||||
struct kone_device *kone = hid_get_drvdata(dev_get_drvdata(dev));
|
||||
@ -351,7 +351,7 @@ static ssize_t kone_sysfs_read_profilex(struct file *fp,
|
||||
|
||||
/* Writes data only if different to stored data */
|
||||
static ssize_t kone_sysfs_write_profilex(struct file *fp,
|
||||
struct kobject *kobj, struct bin_attribute *attr,
|
||||
struct kobject *kobj, const struct bin_attribute *attr,
|
||||
char *buf, loff_t off, size_t count) {
|
||||
struct device *dev = kobj_to_dev(kobj)->parent->parent;
|
||||
struct kone_device *kone = hid_get_drvdata(dev_get_drvdata(dev));
|
||||
@ -382,11 +382,11 @@ static ssize_t kone_sysfs_write_profilex(struct file *fp,
|
||||
return sizeof(struct kone_profile);
|
||||
}
|
||||
#define PROFILE_ATTR(number) \
|
||||
static struct bin_attribute bin_attr_profile##number = { \
|
||||
static const struct bin_attribute bin_attr_profile##number = { \
|
||||
.attr = { .name = "profile" #number, .mode = 0660 }, \
|
||||
.size = sizeof(struct kone_profile), \
|
||||
.read = kone_sysfs_read_profilex, \
|
||||
.write = kone_sysfs_write_profilex, \
|
||||
.read_new = kone_sysfs_read_profilex, \
|
||||
.write_new = kone_sysfs_write_profilex, \
|
||||
.private = &profile_numbers[number-1], \
|
||||
}
|
||||
PROFILE_ATTR(1);
|
||||
@ -634,7 +634,7 @@ static struct attribute *kone_attrs[] = {
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct bin_attribute *kone_bin_attributes[] = {
|
||||
static const struct bin_attribute *const kone_bin_attributes[] = {
|
||||
&bin_attr_settings,
|
||||
&bin_attr_profile1,
|
||||
&bin_attr_profile2,
|
||||
@ -646,7 +646,7 @@ static struct bin_attribute *kone_bin_attributes[] = {
|
||||
|
||||
static const struct attribute_group kone_group = {
|
||||
.attrs = kone_attrs,
|
||||
.bin_attrs = kone_bin_attributes,
|
||||
.bin_attrs_new = kone_bin_attributes,
|
||||
};
|
||||
|
||||
static const struct attribute_group *kone_groups[] = {
|
||||
|
@ -128,8 +128,8 @@ static ssize_t koneplus_sysfs_write(struct file *fp, struct kobject *kobj,
|
||||
|
||||
#define KONEPLUS_SYSFS_W(thingy, THINGY) \
|
||||
static ssize_t koneplus_sysfs_write_ ## thingy(struct file *fp, \
|
||||
struct kobject *kobj, struct bin_attribute *attr, char *buf, \
|
||||
loff_t off, size_t count) \
|
||||
struct kobject *kobj, const struct bin_attribute *attr, \
|
||||
char *buf, loff_t off, size_t count) \
|
||||
{ \
|
||||
return koneplus_sysfs_write(fp, kobj, buf, off, count, \
|
||||
KONEPLUS_SIZE_ ## THINGY, KONEPLUS_COMMAND_ ## THINGY); \
|
||||
@ -137,8 +137,8 @@ static ssize_t koneplus_sysfs_write_ ## thingy(struct file *fp, \
|
||||
|
||||
#define KONEPLUS_SYSFS_R(thingy, THINGY) \
|
||||
static ssize_t koneplus_sysfs_read_ ## thingy(struct file *fp, \
|
||||
struct kobject *kobj, struct bin_attribute *attr, char *buf, \
|
||||
loff_t off, size_t count) \
|
||||
struct kobject *kobj, const struct bin_attribute *attr, \
|
||||
char *buf, loff_t off, size_t count) \
|
||||
{ \
|
||||
return koneplus_sysfs_read(fp, kobj, buf, off, count, \
|
||||
KONEPLUS_SIZE_ ## THINGY, KONEPLUS_COMMAND_ ## THINGY); \
|
||||
@ -150,27 +150,27 @@ KONEPLUS_SYSFS_R(thingy, THINGY)
|
||||
|
||||
#define KONEPLUS_BIN_ATTRIBUTE_RW(thingy, THINGY) \
|
||||
KONEPLUS_SYSFS_RW(thingy, THINGY); \
|
||||
static struct bin_attribute bin_attr_##thingy = { \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0660 }, \
|
||||
.size = KONEPLUS_SIZE_ ## THINGY, \
|
||||
.read = koneplus_sysfs_read_ ## thingy, \
|
||||
.write = koneplus_sysfs_write_ ## thingy \
|
||||
.read_new = koneplus_sysfs_read_ ## thingy, \
|
||||
.write_new = koneplus_sysfs_write_ ## thingy \
|
||||
}
|
||||
|
||||
#define KONEPLUS_BIN_ATTRIBUTE_R(thingy, THINGY) \
|
||||
KONEPLUS_SYSFS_R(thingy, THINGY); \
|
||||
static struct bin_attribute bin_attr_##thingy = { \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0440 }, \
|
||||
.size = KONEPLUS_SIZE_ ## THINGY, \
|
||||
.read = koneplus_sysfs_read_ ## thingy, \
|
||||
.read_new = koneplus_sysfs_read_ ## thingy, \
|
||||
}
|
||||
|
||||
#define KONEPLUS_BIN_ATTRIBUTE_W(thingy, THINGY) \
|
||||
KONEPLUS_SYSFS_W(thingy, THINGY); \
|
||||
static struct bin_attribute bin_attr_##thingy = { \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0220 }, \
|
||||
.size = KONEPLUS_SIZE_ ## THINGY, \
|
||||
.write = koneplus_sysfs_write_ ## thingy \
|
||||
.write_new = koneplus_sysfs_write_ ## thingy \
|
||||
}
|
||||
KONEPLUS_BIN_ATTRIBUTE_W(control, CONTROL);
|
||||
KONEPLUS_BIN_ATTRIBUTE_W(talk, TALK);
|
||||
@ -183,8 +183,8 @@ KONEPLUS_BIN_ATTRIBUTE_RW(profile_settings, PROFILE_SETTINGS);
|
||||
KONEPLUS_BIN_ATTRIBUTE_RW(profile_buttons, PROFILE_BUTTONS);
|
||||
|
||||
static ssize_t koneplus_sysfs_read_profilex_settings(struct file *fp,
|
||||
struct kobject *kobj, struct bin_attribute *attr, char *buf,
|
||||
loff_t off, size_t count)
|
||||
struct kobject *kobj, const struct bin_attribute *attr,
|
||||
char *buf, loff_t off, size_t count)
|
||||
{
|
||||
struct device *dev = kobj_to_dev(kobj)->parent->parent;
|
||||
struct usb_device *usb_dev = interface_to_usbdev(to_usb_interface(dev));
|
||||
@ -201,8 +201,8 @@ static ssize_t koneplus_sysfs_read_profilex_settings(struct file *fp,
|
||||
}
|
||||
|
||||
static ssize_t koneplus_sysfs_read_profilex_buttons(struct file *fp,
|
||||
struct kobject *kobj, struct bin_attribute *attr, char *buf,
|
||||
loff_t off, size_t count)
|
||||
struct kobject *kobj, const struct bin_attribute *attr,
|
||||
char *buf, loff_t off, size_t count)
|
||||
{
|
||||
struct device *dev = kobj_to_dev(kobj)->parent->parent;
|
||||
struct usb_device *usb_dev = interface_to_usbdev(to_usb_interface(dev));
|
||||
@ -219,16 +219,16 @@ static ssize_t koneplus_sysfs_read_profilex_buttons(struct file *fp,
|
||||
}
|
||||
|
||||
#define PROFILE_ATTR(number) \
|
||||
static struct bin_attribute bin_attr_profile##number##_settings = { \
|
||||
static const struct bin_attribute bin_attr_profile##number##_settings = { \
|
||||
.attr = { .name = "profile" #number "_settings", .mode = 0440 }, \
|
||||
.size = KONEPLUS_SIZE_PROFILE_SETTINGS, \
|
||||
.read = koneplus_sysfs_read_profilex_settings, \
|
||||
.read_new = koneplus_sysfs_read_profilex_settings, \
|
||||
.private = &profile_numbers[number-1], \
|
||||
}; \
|
||||
static struct bin_attribute bin_attr_profile##number##_buttons = { \
|
||||
static const struct bin_attribute bin_attr_profile##number##_buttons = { \
|
||||
.attr = { .name = "profile" #number "_buttons", .mode = 0440 }, \
|
||||
.size = KONEPLUS_SIZE_PROFILE_BUTTONS, \
|
||||
.read = koneplus_sysfs_read_profilex_buttons, \
|
||||
.read_new = koneplus_sysfs_read_profilex_buttons, \
|
||||
.private = &profile_numbers[number-1], \
|
||||
};
|
||||
PROFILE_ATTR(1);
|
||||
@ -321,7 +321,7 @@ static struct attribute *koneplus_attrs[] = {
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct bin_attribute *koneplus_bin_attributes[] = {
|
||||
static const struct bin_attribute *const koneplus_bin_attributes[] = {
|
||||
&bin_attr_control,
|
||||
&bin_attr_talk,
|
||||
&bin_attr_macro,
|
||||
@ -346,7 +346,7 @@ static struct bin_attribute *koneplus_bin_attributes[] = {
|
||||
|
||||
static const struct attribute_group koneplus_group = {
|
||||
.attrs = koneplus_attrs,
|
||||
.bin_attrs = koneplus_bin_attributes,
|
||||
.bin_attrs_new = koneplus_bin_attributes,
|
||||
};
|
||||
|
||||
static const struct attribute_group *koneplus_groups[] = {
|
||||
|
@ -47,7 +47,7 @@ ROCCAT_COMMON2_BIN_ATTRIBUTE_R(tcu_image, 0x0c, 0x0404);
|
||||
ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(sensor, 0x0f, 0x06);
|
||||
ROCCAT_COMMON2_BIN_ATTRIBUTE_W(talk, 0x10, 0x10);
|
||||
|
||||
static struct bin_attribute *konepure_bin_attrs[] = {
|
||||
static const struct bin_attribute *const konepure_bin_attrs[] = {
|
||||
&bin_attr_actual_profile,
|
||||
&bin_attr_control,
|
||||
&bin_attr_info,
|
||||
@ -62,7 +62,7 @@ static struct bin_attribute *konepure_bin_attrs[] = {
|
||||
};
|
||||
|
||||
static const struct attribute_group konepure_group = {
|
||||
.bin_attrs = konepure_bin_attrs,
|
||||
.bin_attrs_new = konepure_bin_attrs,
|
||||
};
|
||||
|
||||
static const struct attribute_group *konepure_groups[] = {
|
||||
|
@ -171,8 +171,8 @@ static ssize_t kovaplus_sysfs_write(struct file *fp, struct kobject *kobj,
|
||||
|
||||
#define KOVAPLUS_SYSFS_W(thingy, THINGY) \
|
||||
static ssize_t kovaplus_sysfs_write_ ## thingy(struct file *fp, \
|
||||
struct kobject *kobj, struct bin_attribute *attr, char *buf, \
|
||||
loff_t off, size_t count) \
|
||||
struct kobject *kobj, const struct bin_attribute *attr, \
|
||||
char *buf, loff_t off, size_t count) \
|
||||
{ \
|
||||
return kovaplus_sysfs_write(fp, kobj, buf, off, count, \
|
||||
KOVAPLUS_SIZE_ ## THINGY, KOVAPLUS_COMMAND_ ## THINGY); \
|
||||
@ -180,8 +180,8 @@ static ssize_t kovaplus_sysfs_write_ ## thingy(struct file *fp, \
|
||||
|
||||
#define KOVAPLUS_SYSFS_R(thingy, THINGY) \
|
||||
static ssize_t kovaplus_sysfs_read_ ## thingy(struct file *fp, \
|
||||
struct kobject *kobj, struct bin_attribute *attr, char *buf, \
|
||||
loff_t off, size_t count) \
|
||||
struct kobject *kobj, const struct bin_attribute *attr, \
|
||||
char *buf, loff_t off, size_t count) \
|
||||
{ \
|
||||
return kovaplus_sysfs_read(fp, kobj, buf, off, count, \
|
||||
KOVAPLUS_SIZE_ ## THINGY, KOVAPLUS_COMMAND_ ## THINGY); \
|
||||
@ -193,19 +193,19 @@ KOVAPLUS_SYSFS_R(thingy, THINGY)
|
||||
|
||||
#define KOVAPLUS_BIN_ATTRIBUTE_RW(thingy, THINGY) \
|
||||
KOVAPLUS_SYSFS_RW(thingy, THINGY); \
|
||||
static struct bin_attribute bin_attr_##thingy = { \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0660 }, \
|
||||
.size = KOVAPLUS_SIZE_ ## THINGY, \
|
||||
.read = kovaplus_sysfs_read_ ## thingy, \
|
||||
.write = kovaplus_sysfs_write_ ## thingy \
|
||||
.read_new = kovaplus_sysfs_read_ ## thingy, \
|
||||
.write_new = kovaplus_sysfs_write_ ## thingy \
|
||||
}
|
||||
|
||||
#define KOVAPLUS_BIN_ATTRIBUTE_W(thingy, THINGY) \
|
||||
KOVAPLUS_SYSFS_W(thingy, THINGY); \
|
||||
static struct bin_attribute bin_attr_##thingy = { \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0220 }, \
|
||||
.size = KOVAPLUS_SIZE_ ## THINGY, \
|
||||
.write = kovaplus_sysfs_write_ ## thingy \
|
||||
.write_new = kovaplus_sysfs_write_ ## thingy \
|
||||
}
|
||||
KOVAPLUS_BIN_ATTRIBUTE_W(control, CONTROL);
|
||||
KOVAPLUS_BIN_ATTRIBUTE_RW(info, INFO);
|
||||
@ -213,8 +213,8 @@ KOVAPLUS_BIN_ATTRIBUTE_RW(profile_settings, PROFILE_SETTINGS);
|
||||
KOVAPLUS_BIN_ATTRIBUTE_RW(profile_buttons, PROFILE_BUTTONS);
|
||||
|
||||
static ssize_t kovaplus_sysfs_read_profilex_settings(struct file *fp,
|
||||
struct kobject *kobj, struct bin_attribute *attr, char *buf,
|
||||
loff_t off, size_t count)
|
||||
struct kobject *kobj, const struct bin_attribute *attr,
|
||||
char *buf, loff_t off, size_t count)
|
||||
{
|
||||
struct device *dev = kobj_to_dev(kobj)->parent->parent;
|
||||
struct usb_device *usb_dev = interface_to_usbdev(to_usb_interface(dev));
|
||||
@ -231,8 +231,8 @@ static ssize_t kovaplus_sysfs_read_profilex_settings(struct file *fp,
|
||||
}
|
||||
|
||||
static ssize_t kovaplus_sysfs_read_profilex_buttons(struct file *fp,
|
||||
struct kobject *kobj, struct bin_attribute *attr, char *buf,
|
||||
loff_t off, size_t count)
|
||||
struct kobject *kobj, const struct bin_attribute *attr,
|
||||
char *buf, loff_t off, size_t count)
|
||||
{
|
||||
struct device *dev = kobj_to_dev(kobj)->parent->parent;
|
||||
struct usb_device *usb_dev = interface_to_usbdev(to_usb_interface(dev));
|
||||
@ -249,16 +249,16 @@ static ssize_t kovaplus_sysfs_read_profilex_buttons(struct file *fp,
|
||||
}
|
||||
|
||||
#define PROFILE_ATTR(number) \
|
||||
static struct bin_attribute bin_attr_profile##number##_settings = { \
|
||||
static const struct bin_attribute bin_attr_profile##number##_settings = { \
|
||||
.attr = { .name = "profile" #number "_settings", .mode = 0440 }, \
|
||||
.size = KOVAPLUS_SIZE_PROFILE_SETTINGS, \
|
||||
.read = kovaplus_sysfs_read_profilex_settings, \
|
||||
.read_new = kovaplus_sysfs_read_profilex_settings, \
|
||||
.private = &profile_numbers[number-1], \
|
||||
}; \
|
||||
static struct bin_attribute bin_attr_profile##number##_buttons = { \
|
||||
static const struct bin_attribute bin_attr_profile##number##_buttons = { \
|
||||
.attr = { .name = "profile" #number "_buttons", .mode = 0440 }, \
|
||||
.size = KOVAPLUS_SIZE_PROFILE_BUTTONS, \
|
||||
.read = kovaplus_sysfs_read_profilex_buttons, \
|
||||
.read_new = kovaplus_sysfs_read_profilex_buttons, \
|
||||
.private = &profile_numbers[number-1], \
|
||||
};
|
||||
PROFILE_ATTR(1);
|
||||
@ -379,7 +379,7 @@ static struct attribute *kovaplus_attrs[] = {
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct bin_attribute *kovaplus_bin_attributes[] = {
|
||||
static const struct bin_attribute *const kovaplus_bin_attributes[] = {
|
||||
&bin_attr_control,
|
||||
&bin_attr_info,
|
||||
&bin_attr_profile_settings,
|
||||
@ -399,7 +399,7 @@ static struct bin_attribute *kovaplus_bin_attributes[] = {
|
||||
|
||||
static const struct attribute_group kovaplus_group = {
|
||||
.attrs = kovaplus_attrs,
|
||||
.bin_attrs = kovaplus_bin_attributes,
|
||||
.bin_attrs_new = kovaplus_bin_attributes,
|
||||
};
|
||||
|
||||
static const struct attribute_group *kovaplus_groups[] = {
|
||||
|
@ -66,7 +66,7 @@ static ssize_t lua_sysfs_write(struct file *fp, struct kobject *kobj,
|
||||
|
||||
#define LUA_SYSFS_W(thingy, THINGY) \
|
||||
static ssize_t lua_sysfs_write_ ## thingy(struct file *fp, \
|
||||
struct kobject *kobj, struct bin_attribute *attr, \
|
||||
struct kobject *kobj, const struct bin_attribute *attr, \
|
||||
char *buf, loff_t off, size_t count) \
|
||||
{ \
|
||||
return lua_sysfs_write(fp, kobj, buf, off, count, \
|
||||
@ -75,7 +75,7 @@ static ssize_t lua_sysfs_write_ ## thingy(struct file *fp, \
|
||||
|
||||
#define LUA_SYSFS_R(thingy, THINGY) \
|
||||
static ssize_t lua_sysfs_read_ ## thingy(struct file *fp, \
|
||||
struct kobject *kobj, struct bin_attribute *attr, \
|
||||
struct kobject *kobj, const struct bin_attribute *attr, \
|
||||
char *buf, loff_t off, size_t count) \
|
||||
{ \
|
||||
return lua_sysfs_read(fp, kobj, buf, off, count, \
|
||||
@ -85,11 +85,11 @@ static ssize_t lua_sysfs_read_ ## thingy(struct file *fp, \
|
||||
#define LUA_BIN_ATTRIBUTE_RW(thingy, THINGY) \
|
||||
LUA_SYSFS_W(thingy, THINGY) \
|
||||
LUA_SYSFS_R(thingy, THINGY) \
|
||||
static struct bin_attribute lua_ ## thingy ## _attr = { \
|
||||
static const struct bin_attribute lua_ ## thingy ## _attr = { \
|
||||
.attr = { .name = #thingy, .mode = 0660 }, \
|
||||
.size = LUA_SIZE_ ## THINGY, \
|
||||
.read = lua_sysfs_read_ ## thingy, \
|
||||
.write = lua_sysfs_write_ ## thingy \
|
||||
.read_new = lua_sysfs_read_ ## thingy, \
|
||||
.write_new = lua_sysfs_write_ ## thingy \
|
||||
};
|
||||
|
||||
LUA_BIN_ATTRIBUTE_RW(control, CONTROL)
|
||||
|
@ -129,8 +129,8 @@ static ssize_t pyra_sysfs_write(struct file *fp, struct kobject *kobj,
|
||||
|
||||
#define PYRA_SYSFS_W(thingy, THINGY) \
|
||||
static ssize_t pyra_sysfs_write_ ## thingy(struct file *fp, \
|
||||
struct kobject *kobj, struct bin_attribute *attr, char *buf, \
|
||||
loff_t off, size_t count) \
|
||||
struct kobject *kobj, const struct bin_attribute *attr, \
|
||||
char *buf, loff_t off, size_t count) \
|
||||
{ \
|
||||
return pyra_sysfs_write(fp, kobj, buf, off, count, \
|
||||
PYRA_SIZE_ ## THINGY, PYRA_COMMAND_ ## THINGY); \
|
||||
@ -138,8 +138,8 @@ static ssize_t pyra_sysfs_write_ ## thingy(struct file *fp, \
|
||||
|
||||
#define PYRA_SYSFS_R(thingy, THINGY) \
|
||||
static ssize_t pyra_sysfs_read_ ## thingy(struct file *fp, \
|
||||
struct kobject *kobj, struct bin_attribute *attr, char *buf, \
|
||||
loff_t off, size_t count) \
|
||||
struct kobject *kobj, const struct bin_attribute *attr, \
|
||||
char *buf, loff_t off, size_t count) \
|
||||
{ \
|
||||
return pyra_sysfs_read(fp, kobj, buf, off, count, \
|
||||
PYRA_SIZE_ ## THINGY, PYRA_COMMAND_ ## THINGY); \
|
||||
@ -151,27 +151,27 @@ PYRA_SYSFS_R(thingy, THINGY)
|
||||
|
||||
#define PYRA_BIN_ATTRIBUTE_RW(thingy, THINGY) \
|
||||
PYRA_SYSFS_RW(thingy, THINGY); \
|
||||
static struct bin_attribute bin_attr_##thingy = { \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0660 }, \
|
||||
.size = PYRA_SIZE_ ## THINGY, \
|
||||
.read = pyra_sysfs_read_ ## thingy, \
|
||||
.write = pyra_sysfs_write_ ## thingy \
|
||||
.read_new = pyra_sysfs_read_ ## thingy, \
|
||||
.write_new = pyra_sysfs_write_ ## thingy \
|
||||
}
|
||||
|
||||
#define PYRA_BIN_ATTRIBUTE_R(thingy, THINGY) \
|
||||
PYRA_SYSFS_R(thingy, THINGY); \
|
||||
static struct bin_attribute bin_attr_##thingy = { \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0440 }, \
|
||||
.size = PYRA_SIZE_ ## THINGY, \
|
||||
.read = pyra_sysfs_read_ ## thingy, \
|
||||
.size_new = PYRA_SIZE_ ## THINGY, \
|
||||
.read_new = pyra_sysfs_read_ ## thingy, \
|
||||
}
|
||||
|
||||
#define PYRA_BIN_ATTRIBUTE_W(thingy, THINGY) \
|
||||
PYRA_SYSFS_W(thingy, THINGY); \
|
||||
static struct bin_attribute bin_attr_##thingy = { \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0220 }, \
|
||||
.size = PYRA_SIZE_ ## THINGY, \
|
||||
.write = pyra_sysfs_write_ ## thingy \
|
||||
.write_new = pyra_sysfs_write_ ## thingy \
|
||||
}
|
||||
|
||||
PYRA_BIN_ATTRIBUTE_W(control, CONTROL);
|
||||
@ -180,8 +180,8 @@ PYRA_BIN_ATTRIBUTE_RW(profile_settings, PROFILE_SETTINGS);
|
||||
PYRA_BIN_ATTRIBUTE_RW(profile_buttons, PROFILE_BUTTONS);
|
||||
|
||||
static ssize_t pyra_sysfs_read_profilex_settings(struct file *fp,
|
||||
struct kobject *kobj, struct bin_attribute *attr, char *buf,
|
||||
loff_t off, size_t count)
|
||||
struct kobject *kobj, const struct bin_attribute *attr,
|
||||
char *buf, loff_t off, size_t count)
|
||||
{
|
||||
struct device *dev = kobj_to_dev(kobj)->parent->parent;
|
||||
struct usb_device *usb_dev = interface_to_usbdev(to_usb_interface(dev));
|
||||
@ -198,8 +198,8 @@ static ssize_t pyra_sysfs_read_profilex_settings(struct file *fp,
|
||||
}
|
||||
|
||||
static ssize_t pyra_sysfs_read_profilex_buttons(struct file *fp,
|
||||
struct kobject *kobj, struct bin_attribute *attr, char *buf,
|
||||
loff_t off, size_t count)
|
||||
struct kobject *kobj, const struct bin_attribute *attr,
|
||||
char *buf, loff_t off, size_t count)
|
||||
{
|
||||
struct device *dev = kobj_to_dev(kobj)->parent->parent;
|
||||
struct usb_device *usb_dev = interface_to_usbdev(to_usb_interface(dev));
|
||||
@ -216,16 +216,16 @@ static ssize_t pyra_sysfs_read_profilex_buttons(struct file *fp,
|
||||
}
|
||||
|
||||
#define PROFILE_ATTR(number) \
|
||||
static struct bin_attribute bin_attr_profile##number##_settings = { \
|
||||
static const struct bin_attribute bin_attr_profile##number##_settings = { \
|
||||
.attr = { .name = "profile" #number "_settings", .mode = 0440 }, \
|
||||
.size = PYRA_SIZE_PROFILE_SETTINGS, \
|
||||
.read = pyra_sysfs_read_profilex_settings, \
|
||||
.read_new = pyra_sysfs_read_profilex_settings, \
|
||||
.private = &profile_numbers[number-1], \
|
||||
}; \
|
||||
static struct bin_attribute bin_attr_profile##number##_buttons = { \
|
||||
static const struct bin_attribute bin_attr_profile##number##_buttons = { \
|
||||
.attr = { .name = "profile" #number "_buttons", .mode = 0440 }, \
|
||||
.size = PYRA_SIZE_PROFILE_BUTTONS, \
|
||||
.read = pyra_sysfs_read_profilex_buttons, \
|
||||
.read_new = pyra_sysfs_read_profilex_buttons, \
|
||||
.private = &profile_numbers[number-1], \
|
||||
};
|
||||
PROFILE_ATTR(1);
|
||||
@ -235,8 +235,8 @@ PROFILE_ATTR(4);
|
||||
PROFILE_ATTR(5);
|
||||
|
||||
static ssize_t pyra_sysfs_write_settings(struct file *fp,
|
||||
struct kobject *kobj, struct bin_attribute *attr, char *buf,
|
||||
loff_t off, size_t count)
|
||||
struct kobject *kobj, const struct bin_attribute *attr,
|
||||
char *buf, loff_t off, size_t count)
|
||||
{
|
||||
struct device *dev = kobj_to_dev(kobj)->parent->parent;
|
||||
struct pyra_device *pyra = hid_get_drvdata(dev_get_drvdata(dev));
|
||||
@ -273,7 +273,7 @@ static ssize_t pyra_sysfs_write_settings(struct file *fp,
|
||||
}
|
||||
|
||||
PYRA_SYSFS_R(settings, SETTINGS);
|
||||
static struct bin_attribute bin_attr_settings =
|
||||
static const struct bin_attribute bin_attr_settings =
|
||||
__BIN_ATTR(settings, (S_IWUSR | S_IRUGO),
|
||||
pyra_sysfs_read_settings, pyra_sysfs_write_settings,
|
||||
PYRA_SIZE_SETTINGS);
|
||||
@ -334,7 +334,7 @@ static struct attribute *pyra_attrs[] = {
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct bin_attribute *pyra_bin_attributes[] = {
|
||||
static const struct bin_attribute *const pyra_bin_attributes[] = {
|
||||
&bin_attr_control,
|
||||
&bin_attr_info,
|
||||
&bin_attr_profile_settings,
|
||||
@ -355,7 +355,7 @@ static struct bin_attribute *pyra_bin_attributes[] = {
|
||||
|
||||
static const struct attribute_group pyra_group = {
|
||||
.attrs = pyra_attrs,
|
||||
.bin_attrs = pyra_bin_attributes,
|
||||
.bin_attrs_new = pyra_bin_attributes,
|
||||
};
|
||||
|
||||
static const struct attribute_group *pyra_groups[] = {
|
||||
|
@ -47,7 +47,7 @@ ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(stored_lights, 0x17, 0x0566);
|
||||
ROCCAT_COMMON2_BIN_ATTRIBUTE_W(custom_lights, 0x18, 0x14);
|
||||
ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(light_macro, 0x19, 0x07d2);
|
||||
|
||||
static struct bin_attribute *ryos_bin_attrs[] = {
|
||||
static const struct bin_attribute *const ryos_bin_attrs[] = {
|
||||
&bin_attr_control,
|
||||
&bin_attr_profile,
|
||||
&bin_attr_keys_primary,
|
||||
@ -70,7 +70,7 @@ static struct bin_attribute *ryos_bin_attrs[] = {
|
||||
};
|
||||
|
||||
static const struct attribute_group ryos_group = {
|
||||
.bin_attrs = ryos_bin_attrs,
|
||||
.bin_attrs_new = ryos_bin_attrs,
|
||||
};
|
||||
|
||||
static const struct attribute_group *ryos_groups[] = {
|
||||
|
@ -30,7 +30,7 @@ ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(macro, 0x8, 0x0823);
|
||||
ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(info, 0x9, 0x08);
|
||||
ROCCAT_COMMON2_BIN_ATTRIBUTE_RW(sensor, 0xc, 0x04);
|
||||
|
||||
static struct bin_attribute *savu_bin_attrs[] = {
|
||||
static const struct bin_attribute *const savu_bin_attrs[] = {
|
||||
&bin_attr_control,
|
||||
&bin_attr_profile,
|
||||
&bin_attr_general,
|
||||
@ -42,7 +42,7 @@ static struct bin_attribute *savu_bin_attrs[] = {
|
||||
};
|
||||
|
||||
static const struct attribute_group savu_group = {
|
||||
.bin_attrs = savu_bin_attrs,
|
||||
.bin_attrs_new = savu_bin_attrs,
|
||||
};
|
||||
|
||||
static const struct attribute_group *savu_groups[] = {
|
||||
|
@ -51,6 +51,7 @@
|
||||
#define I2C_HID_QUIRK_NO_WAKEUP_AFTER_RESET BIT(4)
|
||||
#define I2C_HID_QUIRK_NO_SLEEP_ON_SUSPEND BIT(5)
|
||||
#define I2C_HID_QUIRK_DELAY_WAKEUP_AFTER_RESUME BIT(6)
|
||||
#define I2C_HID_QUIRK_RE_POWER_ON BIT(7)
|
||||
|
||||
/* Command opcodes */
|
||||
#define I2C_HID_OPCODE_RESET 0x01
|
||||
@ -135,6 +136,11 @@ static const struct i2c_hid_quirks {
|
||||
I2C_HID_QUIRK_BAD_INPUT_SIZE },
|
||||
{ I2C_VENDOR_ID_CIRQUE, I2C_PRODUCT_ID_CIRQUE_1063,
|
||||
I2C_HID_QUIRK_NO_SLEEP_ON_SUSPEND },
|
||||
/*
|
||||
* Without additional power on command, at least some QTEC devices send garbage
|
||||
*/
|
||||
{ I2C_VENDOR_ID_QTEC, HID_ANY_ID,
|
||||
I2C_HID_QUIRK_RE_POWER_ON },
|
||||
/*
|
||||
* Sending the wakeup after reset actually break ELAN touchscreen controller
|
||||
*/
|
||||
@ -1073,7 +1079,11 @@ static int i2c_hid_core_register_hid(struct i2c_hid *ihid)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
/* At least some QTEC devices need this after initialization */
|
||||
if (ihid->quirks & I2C_HID_QUIRK_RE_POWER_ON)
|
||||
ret = i2c_hid_set_power(ihid, I2C_HID_PWR_ON);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int i2c_hid_core_probe_panel_follower(struct i2c_hid *ihid)
|
||||
|
@ -1370,17 +1370,6 @@ static int wacom_led_register_one(struct device *dev, struct wacom *wacom,
|
||||
if (!name)
|
||||
return -ENOMEM;
|
||||
|
||||
if (!read_only) {
|
||||
led->trigger.name = name;
|
||||
error = devm_led_trigger_register(dev, &led->trigger);
|
||||
if (error) {
|
||||
hid_err(wacom->hdev,
|
||||
"failed to register LED trigger %s: %d\n",
|
||||
led->cdev.name, error);
|
||||
return error;
|
||||
}
|
||||
}
|
||||
|
||||
led->group = group;
|
||||
led->id = id;
|
||||
led->wacom = wacom;
|
||||
@ -1397,6 +1386,19 @@ static int wacom_led_register_one(struct device *dev, struct wacom *wacom,
|
||||
led->cdev.brightness_set = wacom_led_readonly_brightness_set;
|
||||
}
|
||||
|
||||
if (!read_only) {
|
||||
led->trigger.name = name;
|
||||
if (id == wacom->led.groups[group].select)
|
||||
led->trigger.brightness = wacom_leds_brightness_get(led);
|
||||
error = devm_led_trigger_register(dev, &led->trigger);
|
||||
if (error) {
|
||||
hid_err(wacom->hdev,
|
||||
"failed to register LED trigger %s: %d\n",
|
||||
led->cdev.name, error);
|
||||
return error;
|
||||
}
|
||||
}
|
||||
|
||||
error = devm_led_classdev_register(dev, &led->cdev);
|
||||
if (error) {
|
||||
hid_err(wacom->hdev,
|
||||
|
1
tools/testing/selftests/hid/.gitignore
vendored
1
tools/testing/selftests/hid/.gitignore
vendored
@ -1,5 +1,6 @@
|
||||
bpftool
|
||||
*.skel.h
|
||||
/host-tools
|
||||
/tools
|
||||
hid_bpf
|
||||
hidraw
|
||||
|
Loading…
Reference in New Issue
Block a user