diff options
| -rw-r--r-- | drivers/input/serio/serio.c | 14 | ||||
| -rw-r--r-- | include/linux/serio.h | 1 |
2 files changed, 15 insertions, 0 deletions
diff --git a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c index 8f4c4ab04bc2..b29134de983b 100644 --- a/drivers/input/serio/serio.c +++ b/drivers/input/serio/serio.c | |||
| @@ -451,6 +451,13 @@ static ssize_t serio_set_bind_mode(struct device *dev, struct device_attribute * | |||
| 451 | return retval; | 451 | return retval; |
| 452 | } | 452 | } |
| 453 | 453 | ||
| 454 | static ssize_t firmware_id_show(struct device *dev, struct device_attribute *attr, char *buf) | ||
| 455 | { | ||
| 456 | struct serio *serio = to_serio_port(dev); | ||
| 457 | |||
| 458 | return sprintf(buf, "%s\n", serio->firmware_id); | ||
| 459 | } | ||
| 460 | |||
| 454 | static DEVICE_ATTR_RO(type); | 461 | static DEVICE_ATTR_RO(type); |
| 455 | static DEVICE_ATTR_RO(proto); | 462 | static DEVICE_ATTR_RO(proto); |
| 456 | static DEVICE_ATTR_RO(id); | 463 | static DEVICE_ATTR_RO(id); |
| @@ -473,12 +480,14 @@ static DEVICE_ATTR_RO(modalias); | |||
| 473 | static DEVICE_ATTR_WO(drvctl); | 480 | static DEVICE_ATTR_WO(drvctl); |
| 474 | static DEVICE_ATTR(description, S_IRUGO, serio_show_description, NULL); | 481 | static DEVICE_ATTR(description, S_IRUGO, serio_show_description, NULL); |
| 475 | static DEVICE_ATTR(bind_mode, S_IWUSR | S_IRUGO, serio_show_bind_mode, serio_set_bind_mode); | 482 | static DEVICE_ATTR(bind_mode, S_IWUSR | S_IRUGO, serio_show_bind_mode, serio_set_bind_mode); |
| 483 | static DEVICE_ATTR_RO(firmware_id); | ||
| 476 | 484 | ||
| 477 | static struct attribute *serio_device_attrs[] = { | 485 | static struct attribute *serio_device_attrs[] = { |
| 478 | &dev_attr_modalias.attr, | 486 | &dev_attr_modalias.attr, |
| 479 | &dev_attr_description.attr, | 487 | &dev_attr_description.attr, |
| 480 | &dev_attr_drvctl.attr, | 488 | &dev_attr_drvctl.attr, |
| 481 | &dev_attr_bind_mode.attr, | 489 | &dev_attr_bind_mode.attr, |
| 490 | &dev_attr_firmware_id.attr, | ||
| 482 | NULL | 491 | NULL |
| 483 | }; | 492 | }; |
| 484 | 493 | ||
| @@ -921,9 +930,14 @@ static int serio_uevent(struct device *dev, struct kobj_uevent_env *env) | |||
| 921 | SERIO_ADD_UEVENT_VAR("SERIO_PROTO=%02x", serio->id.proto); | 930 | SERIO_ADD_UEVENT_VAR("SERIO_PROTO=%02x", serio->id.proto); |
| 922 | SERIO_ADD_UEVENT_VAR("SERIO_ID=%02x", serio->id.id); | 931 | SERIO_ADD_UEVENT_VAR("SERIO_ID=%02x", serio->id.id); |
| 923 | SERIO_ADD_UEVENT_VAR("SERIO_EXTRA=%02x", serio->id.extra); | 932 | SERIO_ADD_UEVENT_VAR("SERIO_EXTRA=%02x", serio->id.extra); |
| 933 | |||
| 924 | SERIO_ADD_UEVENT_VAR("MODALIAS=serio:ty%02Xpr%02Xid%02Xex%02X", | 934 | SERIO_ADD_UEVENT_VAR("MODALIAS=serio:ty%02Xpr%02Xid%02Xex%02X", |
| 925 | serio->id.type, serio->id.proto, serio->id.id, serio->id.extra); | 935 | serio->id.type, serio->id.proto, serio->id.id, serio->id.extra); |
| 926 | 936 | ||
| 937 | if (serio->firmware_id[0]) | ||
| 938 | SERIO_ADD_UEVENT_VAR("SERIO_FIRMWARE_ID=%s", | ||
| 939 | serio->firmware_id); | ||
| 940 | |||
| 927 | return 0; | 941 | return 0; |
| 928 | } | 942 | } |
| 929 | #undef SERIO_ADD_UEVENT_VAR | 943 | #undef SERIO_ADD_UEVENT_VAR |
diff --git a/include/linux/serio.h b/include/linux/serio.h index 36aac733840a..9f779c7a2da4 100644 --- a/include/linux/serio.h +++ b/include/linux/serio.h | |||
| @@ -23,6 +23,7 @@ struct serio { | |||
| 23 | 23 | ||
| 24 | char name[32]; | 24 | char name[32]; |
| 25 | char phys[32]; | 25 | char phys[32]; |
| 26 | char firmware_id[128]; | ||
| 26 | 27 | ||
| 27 | bool manual_bind; | 28 | bool manual_bind; |
| 28 | 29 | ||
