Commit 4c4480aa authored by Ooi, Joyce's avatar Ooi, Joyce Committed by Jiri Kosina

HID: sensor: fix attributes in HID sensor interface

User is unable to access to input-X-yyy and feature-X-yyy where
X is a hex value and more than 9 (e.g. input-a-yyy, feature-b-yyy) in HID
sensor custom sysfs interface.
This is because when creating the attribute, the attribute index is
written to using %x (hex). However, when reading and writing values into
the attribute, the attribute index is scanned using %d (decimal). Hence,
user is unable to access to attributes with index in hex values
(e.g. 'a', 'b', 'c') but able to access to attributes with index in
decimal values (e.g. 1, 2, 3,..).
This fix will change input-%d-%x-%s and feature-%d-%x-%s to input-%x-%x-%s
and feature-%x-%x-%s in show_values() and store_values() accordingly.
Signed-off-by: default avatarOoi, Joyce <joyce.ooi@intel.com>
Reviewed-by: default avatarBenjamin Tissoires <benjamin.tissoires@redhat.com>
Acked-by: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 021afd55
...@@ -292,11 +292,11 @@ static ssize_t show_value(struct device *dev, struct device_attribute *attr, ...@@ -292,11 +292,11 @@ static ssize_t show_value(struct device *dev, struct device_attribute *attr,
bool input = false; bool input = false;
int value = 0; int value = 0;
if (sscanf(attr->attr.name, "feature-%d-%x-%s", &index, &usage, if (sscanf(attr->attr.name, "feature-%x-%x-%s", &index, &usage,
name) == 3) { name) == 3) {
feature = true; feature = true;
field_index = index + sensor_inst->input_field_count; field_index = index + sensor_inst->input_field_count;
} else if (sscanf(attr->attr.name, "input-%d-%x-%s", &index, &usage, } else if (sscanf(attr->attr.name, "input-%x-%x-%s", &index, &usage,
name) == 3) { name) == 3) {
input = true; input = true;
field_index = index; field_index = index;
...@@ -398,7 +398,7 @@ static ssize_t store_value(struct device *dev, struct device_attribute *attr, ...@@ -398,7 +398,7 @@ static ssize_t store_value(struct device *dev, struct device_attribute *attr,
char name[HID_CUSTOM_NAME_LENGTH]; char name[HID_CUSTOM_NAME_LENGTH];
int value; int value;
if (sscanf(attr->attr.name, "feature-%d-%x-%s", &index, &usage, if (sscanf(attr->attr.name, "feature-%x-%x-%s", &index, &usage,
name) == 3) { name) == 3) {
field_index = index + sensor_inst->input_field_count; field_index = index + sensor_inst->input_field_count;
} else } else
......
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