Add a new sysfs entry called report_descriptor which contains the HID report descriptor. Signed-off-by: Alan Ott <alan@xxxxxxxxxxx> --- drivers/hid/hid-core.c | 28 ++++++++++++++++++++++++++++ 1 files changed, 28 insertions(+), 0 deletions(-) diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index d678cf3..0ff1ba2 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -1159,6 +1159,28 @@ static bool hid_hiddev(struct hid_device *hdev) return !!hid_match_id(hdev, hid_hiddev_list); } + +static ssize_t show_report_descriptor(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + int i, cur = 0; + struct hid_device *hdev = container_of(dev, struct hid_device, dev); + + for (i = 0; i < hdev->rsize; i++) { + if (cur + 4 >= PAGE_SIZE) + break; + sprintf(buf + cur, "%02hhx ", hdev->rdesc[i]); + cur += 3; + } + /* Replace the last space with a newline. */ + buf[cur-1] = '\n'; + buf[PAGE_SIZE-1] = '\0'; + return cur + 1; +} + +static DEVICE_ATTR(report_descriptor, S_IRUGO, show_report_descriptor, NULL); + int hid_connect(struct hid_device *hdev, unsigned int connect_mask) { static const char *types[] = { "Device", "Pointer", "Mouse", "Device", @@ -1169,6 +1191,7 @@ int hid_connect(struct hid_device *hdev, unsigned int connect_mask) char buf[64]; unsigned int i; int len; + int ret; if (hdev->quirks & HID_QUIRK_HIDDEV_FORCE) connect_mask |= (HID_CONNECT_HIDDEV_FORCE | HID_CONNECT_HIDDEV); @@ -1230,6 +1253,11 @@ int hid_connect(struct hid_device *hdev, unsigned int connect_mask) bus = "<UNKNOWN>"; } + ret = device_create_file(&hdev->dev, &dev_attr_report_descriptor); + if (ret) + hid_warn(hdev, + "can't create sysfs report descriptor attribute err: %d\n", ret); + hid_info(hdev, "%s: %s HID v%x.%02x %s [%s] on %s\n", buf, bus, hdev->version >> 8, hdev->version & 0xff, type, hdev->name, hdev->phys); -- 1.7.0.4 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html