@@ -375,6 +375,26 @@ static ssize_t set_deactivate_slack(struct device *dev,
static DEVICE_ATTR(deactivate_slack, S_IWUSR | S_IRUGO, show_deactivate_slack,
set_deactivate_slack);
+static ssize_t show_firmware(struct device *dev,
+ struct device_attribute *attr,
+ char *buf)
+{
+ struct hid_device *hdev = container_of(dev, struct hid_device, dev);
+ struct ntrig_data *nd = hid_get_drvdata(hdev);
+
+ if (!(nd->firmware_version[0] || nd->firmware_version[1] ||
+ nd->firmware_version[2] || nd->firmware_version[3]))
+ return sprintf(buf, "Firmware version unavailable");
+
+ ntrig_version_string(nd->firmware_version, buf);
+
+ return sprintf(buf, "%s (%02x%02x %02x%02x)\n", buf,
+ nd->firmware_version[0], nd->firmware_version[1],
+ nd->firmware_version[2], nd->firmware_version[3]);
+}
+
+static DEVICE_ATTR(firmware, S_IRUGO, show_firmware, NULL);
+
static struct attribute *sysfs_attrs[] = {
&dev_attr_sensor_physical_width.attr,
&dev_attr_sensor_physical_height.attr,
@@ -386,6 +406,7 @@ static struct attribute *sysfs_attrs[] = {
&dev_attr_activation_width.attr,
&dev_attr_activation_height.attr,
&dev_attr_deactivate_slack.attr,
+ &dev_attr_firmware.attr,
NULL
};