Loading Documentation/hid/hid-sensor.txt +84 −0 Original line number Diff line number Diff line Loading @@ -138,3 +138,87 @@ accelerometer wants to poll X axis value, then it can call this function with the usage id of X axis. HID sensors can provide events, so this is not necessary to poll for any field. If there is some new sample, the core driver will call registered callback function to process the sample. ---------- HID Custom and generic Sensors HID Sensor specification defines two special sensor usage types. Since they don't represent a standard sensor, it is not possible to define using Linux IIO type interfaces. The purpose of these sensors is to extend the functionality or provide a way to obfuscate the data being communicated by a sensor. Without knowing the mapping between the data and its encapsulated form, it is difficult for an application/driver to determine what data is being communicated by the sensor. This allows some differentiating use cases, where vendor can provide applications. Some common use cases are debug other sensors or to provide some events like keyboard attached/detached or lid open/close. To allow application to utilize these sensors, here they are exported uses sysfs attribute groups, attributes and misc device interface. An example of this representation on sysfs: /sys/devices/pci0000:00/INT33C2:00/i2c-0/i2c-INT33D1:00/0018:8086:09FA.0001/HID-SENSOR-2000e1.6.auto$ tree -R . ????????? enable_sensor ????????? feature-0-200316 ??????? ????????? feature-0-200316-maximum ??????? ????????? feature-0-200316-minimum ??????? ????????? feature-0-200316-name ??????? ????????? feature-0-200316-size ??????? ????????? feature-0-200316-unit-expo ??????? ????????? feature-0-200316-units ??????? ????????? feature-0-200316-value ????????? feature-1-200201 ??????? ????????? feature-1-200201-maximum ??????? ????????? feature-1-200201-minimum ??????? ????????? feature-1-200201-name ??????? ????????? feature-1-200201-size ??????? ????????? feature-1-200201-unit-expo ??????? ????????? feature-1-200201-units ??????? ????????? feature-1-200201-value ????????? input-0-200201 ??????? ????????? input-0-200201-maximum ??????? ????????? input-0-200201-minimum ??????? ????????? input-0-200201-name ??????? ????????? input-0-200201-size ??????? ????????? input-0-200201-unit-expo ??????? ????????? input-0-200201-units ??????? ????????? input-0-200201-value ????????? input-1-200202 ??????? ????????? input-1-200202-maximum ??????? ????????? input-1-200202-minimum ??????? ????????? input-1-200202-name ??????? ????????? input-1-200202-size ??????? ????????? input-1-200202-unit-expo ??????? ????????? input-1-200202-units ??????? ????????? input-1-200202-value Here there is a custom sensors with four fields, two feature and two inputs. Each field is represented by a set of attributes. All fields except the "value" are read only. The value field is a RW field. Example /sys/bus/platform/devices/HID-SENSOR-2000e1.6.auto/feature-0-200316$ grep -r . * feature-0-200316-maximum:6 feature-0-200316-minimum:0 feature-0-200316-name:property-reporting-state feature-0-200316-size:1 feature-0-200316-unit-expo:0 feature-0-200316-units:25 feature-0-200316-value:1 How to enable such sensor? By default sensor can be power gated. To enable sysfs attribute "enable" can be used. $ echo 1 > enable_sensor Once enabled and powered on, sensor can report value using HID reports. These reports are pushed using misc device interface in a FIFO order. /dev$ tree | grep HID-SENSOR-2000e1.6.auto ??????? ????????? 10:53 -> ../HID-SENSOR-2000e1.6.auto ????????? HID-SENSOR-2000e1.6.auto Each reports can be of variable length preceded by a header. This header consist of a 32 bit usage id, 64 bit time stamp and 32 bit length field of raw data. drivers/hid/Kconfig +15 −0 Original line number Diff line number Diff line Loading @@ -878,6 +878,21 @@ config HID_SENSOR_HUB for events and handle data streams. Each sensor driver can format data and present to user mode using input or IIO interface. config HID_SENSOR_CUSTOM_SENSOR tristate "HID Sensors hub custom sensor support" depends on HID_SENSOR_HUB default n ---help--- HID Sensor hub specification allows definition of some custom and generic sensors. Unlike other HID sensors, they can't be exported via Linux IIO because of custom fields. This is up to the manufacturer to decide how to interpret these special sensor ids and process in the user space. Currently some manufacturers are using these ids for sensor calibration and debugging other sensors. Manufacturers should't use these special custom sensor ids to export any of the standard sensors. Select this config option for custom/generic sensor support. endmenu endif # HID Loading drivers/hid/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,7 @@ obj-$(CONFIG_HID_WACOM) += wacom.o obj-$(CONFIG_HID_WALTOP) += hid-waltop.o obj-$(CONFIG_HID_WIIMOTE) += hid-wiimote.o obj-$(CONFIG_HID_SENSOR_HUB) += hid-sensor-hub.o obj-$(CONFIG_HID_SENSOR_CUSTOM_SENSOR) += hid-sensor-custom.o obj-$(CONFIG_USB_HID) += usbhid/ obj-$(CONFIG_USB_MOUSE) += usbhid/ Loading Loading
Documentation/hid/hid-sensor.txt +84 −0 Original line number Diff line number Diff line Loading @@ -138,3 +138,87 @@ accelerometer wants to poll X axis value, then it can call this function with the usage id of X axis. HID sensors can provide events, so this is not necessary to poll for any field. If there is some new sample, the core driver will call registered callback function to process the sample. ---------- HID Custom and generic Sensors HID Sensor specification defines two special sensor usage types. Since they don't represent a standard sensor, it is not possible to define using Linux IIO type interfaces. The purpose of these sensors is to extend the functionality or provide a way to obfuscate the data being communicated by a sensor. Without knowing the mapping between the data and its encapsulated form, it is difficult for an application/driver to determine what data is being communicated by the sensor. This allows some differentiating use cases, where vendor can provide applications. Some common use cases are debug other sensors or to provide some events like keyboard attached/detached or lid open/close. To allow application to utilize these sensors, here they are exported uses sysfs attribute groups, attributes and misc device interface. An example of this representation on sysfs: /sys/devices/pci0000:00/INT33C2:00/i2c-0/i2c-INT33D1:00/0018:8086:09FA.0001/HID-SENSOR-2000e1.6.auto$ tree -R . ????????? enable_sensor ????????? feature-0-200316 ??????? ????????? feature-0-200316-maximum ??????? ????????? feature-0-200316-minimum ??????? ????????? feature-0-200316-name ??????? ????????? feature-0-200316-size ??????? ????????? feature-0-200316-unit-expo ??????? ????????? feature-0-200316-units ??????? ????????? feature-0-200316-value ????????? feature-1-200201 ??????? ????????? feature-1-200201-maximum ??????? ????????? feature-1-200201-minimum ??????? ????????? feature-1-200201-name ??????? ????????? feature-1-200201-size ??????? ????????? feature-1-200201-unit-expo ??????? ????????? feature-1-200201-units ??????? ????????? feature-1-200201-value ????????? input-0-200201 ??????? ????????? input-0-200201-maximum ??????? ????????? input-0-200201-minimum ??????? ????????? input-0-200201-name ??????? ????????? input-0-200201-size ??????? ????????? input-0-200201-unit-expo ??????? ????????? input-0-200201-units ??????? ????????? input-0-200201-value ????????? input-1-200202 ??????? ????????? input-1-200202-maximum ??????? ????????? input-1-200202-minimum ??????? ????????? input-1-200202-name ??????? ????????? input-1-200202-size ??????? ????????? input-1-200202-unit-expo ??????? ????????? input-1-200202-units ??????? ????????? input-1-200202-value Here there is a custom sensors with four fields, two feature and two inputs. Each field is represented by a set of attributes. All fields except the "value" are read only. The value field is a RW field. Example /sys/bus/platform/devices/HID-SENSOR-2000e1.6.auto/feature-0-200316$ grep -r . * feature-0-200316-maximum:6 feature-0-200316-minimum:0 feature-0-200316-name:property-reporting-state feature-0-200316-size:1 feature-0-200316-unit-expo:0 feature-0-200316-units:25 feature-0-200316-value:1 How to enable such sensor? By default sensor can be power gated. To enable sysfs attribute "enable" can be used. $ echo 1 > enable_sensor Once enabled and powered on, sensor can report value using HID reports. These reports are pushed using misc device interface in a FIFO order. /dev$ tree | grep HID-SENSOR-2000e1.6.auto ??????? ????????? 10:53 -> ../HID-SENSOR-2000e1.6.auto ????????? HID-SENSOR-2000e1.6.auto Each reports can be of variable length preceded by a header. This header consist of a 32 bit usage id, 64 bit time stamp and 32 bit length field of raw data.
drivers/hid/Kconfig +15 −0 Original line number Diff line number Diff line Loading @@ -878,6 +878,21 @@ config HID_SENSOR_HUB for events and handle data streams. Each sensor driver can format data and present to user mode using input or IIO interface. config HID_SENSOR_CUSTOM_SENSOR tristate "HID Sensors hub custom sensor support" depends on HID_SENSOR_HUB default n ---help--- HID Sensor hub specification allows definition of some custom and generic sensors. Unlike other HID sensors, they can't be exported via Linux IIO because of custom fields. This is up to the manufacturer to decide how to interpret these special sensor ids and process in the user space. Currently some manufacturers are using these ids for sensor calibration and debugging other sensors. Manufacturers should't use these special custom sensor ids to export any of the standard sensors. Select this config option for custom/generic sensor support. endmenu endif # HID Loading
drivers/hid/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,7 @@ obj-$(CONFIG_HID_WACOM) += wacom.o obj-$(CONFIG_HID_WALTOP) += hid-waltop.o obj-$(CONFIG_HID_WIIMOTE) += hid-wiimote.o obj-$(CONFIG_HID_SENSOR_HUB) += hid-sensor-hub.o obj-$(CONFIG_HID_SENSOR_CUSTOM_SENSOR) += hid-sensor-custom.o obj-$(CONFIG_USB_HID) += usbhid/ obj-$(CONFIG_USB_MOUSE) += usbhid/ Loading