Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) =================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) Intel Integrated Sensor Hub (ISH)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) =================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) A sensor hub enables the ability to offload sensor polling and algorithm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) processing to a dedicated low power co-processor. This allows the core
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) processor to go into low power modes more often, resulting in the increased
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) battery life.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) There are many vendors providing external sensor hubs confirming to HID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) Sensor usage tables, and used in several tablets, 2 in 1 convertible laptops
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) and embedded products. Linux had this support since Linux 3.9.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) Intel® introduced integrated sensor hubs as a part of the SoC starting from
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) Cherry Trail and now supported on multiple generations of CPU packages. There
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) are many commercial devices already shipped with Integrated Sensor Hubs (ISH).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) These ISH also comply to HID sensor specification, but the  difference is the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) transport protocol used for communication. The current external sensor hubs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) mainly use HID over i2C or USB. But ISH doesn't use either i2c or USB.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 1. Overview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) ===========
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) Using a analogy with a usbhid implementation, the ISH follows a similar model
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) for a very high speed communication::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	-----------------		----------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 	|    USB HID	|	-->	|    ISH HID	     |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 	-----------------		----------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	-----------------		----------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	|  USB protocol	|	-->	|    ISH Transport   |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	-----------------		----------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	-----------------		----------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	|  EHCI/XHCI	|	-->	|    ISH IPC	     |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 	-----------------		----------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 	      PCI				 PCI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 	-----------------		----------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38)         |Host controller|	-->	|    ISH processor   |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	-----------------		----------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	     USB Link
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 	-----------------		----------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	| USB End points|	-->	|    ISH Clients     |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	-----------------		----------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) Like USB protocol provides a method for device enumeration, link management
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) and user data encapsulation, the ISH also provides similar services. But it is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) very light weight tailored to manage and communicate with ISH client
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) applications implemented in the firmware.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) The ISH allows multiple sensor management applications executing in the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) firmware. Like USB endpoints the messaging can be to/from a client. As part of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) enumeration process, these clients are identified. These clients can be simple
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) HID sensor applications, sensor calibration application or senor firmware
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) update application.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) The implementation model is similar, like USB bus, ISH transport is also
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) implemented as a bus. Each client application executing in the ISH processor
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) is registered as a device on this bus. The driver, which binds each device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) (ISH HID driver) identifies the device type and registers with the hid core.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 2. ISH Implementation: Block Diagram
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) ====================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	 ---------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	|  User Space Applications  |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	 ---------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70)   ----------------IIO ABI----------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	 --------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	|  IIO Sensor Drivers	  |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	 --------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	 --------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	|	 IIO core	  |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	 --------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	 --------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	|   HID Sensor Hub MFD	  |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	 --------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	 --------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	|       HID Core	  |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	 --------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	 --------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	|   HID over ISH Client   |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	 --------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	 --------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	|   ISH Transport (ISHTP) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	 --------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	 --------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	|      IPC Drivers	  |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	 --------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92)   OS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93)   ---------------- PCI -----------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94)   Hardware + Firmware
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	 ----------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	| ISH Hardware/Firmware(FW) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	 ----------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 3. High level processing in above blocks
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) ========================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 3.1 Hardware Interface
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) ----------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) The ISH is exposed as "Non-VGA unclassified PCI device" to the host. The PCI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) product and vendor IDs are changed from different generations of processors. So
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) the source code which enumerate drivers needs to update from generation to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) generation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 3.2 Inter Processor Communication (IPC) driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) ----------------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) Location: drivers/hid/intel-ish-hid/ipc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) The IPC message used memory mapped I/O. The registers are defined in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) hw-ish-regs.h.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 3.2.1 IPC/FW message types
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) ^^^^^^^^^^^^^^^^^^^^^^^^^^
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) There are two types of messages, one for management of link and other messages
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) are to and from transport layers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) TX and RX of Transport messages
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) ...............................
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) A set of memory mapped register offers support of multi byte messages TX and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) RX (E.g.IPC_REG_ISH2HOST_MSG, IPC_REG_HOST2ISH_MSG). The IPC layer maintains
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) internal queues to sequence messages and send them in order to the FW.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) Optionally the caller can register handler to get notification of completion.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) A door bell mechanism is used in messaging to trigger processing in host and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) client firmware side. When ISH interrupt handler is called, the ISH2HOST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) doorbell register is used by host drivers to determine that the interrupt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) is for ISH.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) Each side has 32 32-bit message registers and a 32-bit doorbell. Doorbell
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) register has the following format:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) Bits 0..6: fragment length (7 bits are used)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) Bits 10..13: encapsulated protocol
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) Bits 16..19: management command (for IPC management protocol)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) Bit 31: doorbell trigger (signal H/W interrupt to the other side)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) Other bits are reserved, should be 0.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 3.2.2 Transport layer interface
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) To abstract HW level IPC communication, a set of callbacks are registered.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) The transport layer uses them to send and receive messages.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) Refer to  struct ishtp_hw_ops for callbacks.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 3.3 ISH Transport layer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) -----------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) Location: drivers/hid/intel-ish-hid/ishtp/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 3.3.1 A Generic Transport Layer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) The transport layer is a bi-directional protocol, which defines:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) - Set of commands to start, stop, connect, disconnect and flow control
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) (ishtp/hbm.h) for details
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) - A flow control mechanism to avoid buffer overflows
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) This protocol resembles bus messages described in the following document:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) http://www.intel.com/content/dam/www/public/us/en/documents/technical-\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) specifications/dcmi-hi-1-0-spec.pdf "Chapter 7: Bus Message Layer"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 3.3.2 Connection and Flow Control Mechanism
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) Each FW client and a protocol is identified by an UUID. In order to communicate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) to a FW client, a connection must be established using connect request and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) response bus messages. If successful, a pair (host_client_id and fw_client_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) will identify the connection.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) Once connection is established, peers send each other flow control bus messages
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) independently. Every peer may send a message only if it has received a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) flow-control credit before. Once it sent a message, it may not send another one
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) before receiving the next flow control credit.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) Either side can send disconnect request bus message to end communication. Also
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) the link will be dropped if major FW reset occurs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 3.3.3 Peer to Peer data transfer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) Peer to Peer data transfer can happen with or without using DMA. Depending on
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) the sensor bandwidth requirement DMA can be enabled by using module parameter
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) ishtp_use_dma under intel_ishtp.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) Each side (host and FW) manages its DMA transfer memory independently. When an
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) ISHTP client from either host or FW side wants to send something, it decides
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) whether to send over IPC or over DMA; for each transfer the decision is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) independent. The sending side sends DMA_XFER message when the message is in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) the respective host buffer (TX when host client sends, RX when FW client
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) sends). The recipient of DMA message responds with DMA_XFER_ACK, indicating
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) the sender that the memory region for that message may be reused.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) DMA initialization is started with host sending DMA_ALLOC_NOTIFY bus message
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) (that includes RX buffer) and FW responds with DMA_ALLOC_NOTIFY_ACK.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) Additionally to DMA address communication, this sequence checks capabilities:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) if thw host doesn't support DMA, then it won't send DMA allocation, so FW can't
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) send DMA; if FW doesn't support DMA then it won't respond with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) DMA_ALLOC_NOTIFY_ACK, in which case host will not use DMA transfers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) Here ISH acts as busmaster DMA controller. Hence when host sends DMA_XFER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) it's request to do host->ISH DMA transfer; when FW sends DMA_XFER, it means
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) that it already did DMA and the message resides at host. Thus, DMA_XFER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) and DMA_XFER_ACK act as ownership indicators.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) At initial state all outgoing memory belongs to the sender (TX to host, RX to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) FW), DMA_XFER transfers ownership on the region that contains ISHTP message to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) the receiving side, DMA_XFER_ACK returns ownership to the sender. A sender
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) needs not wait for previous DMA_XFER to be ack'ed, and may send another message
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) as long as remaining continuous memory in its ownership is enough.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) In principle, multiple DMA_XFER and DMA_XFER_ACK messages may be sent at once
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) (up to IPC MTU), thus allowing for interrupt throttling.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) Currently, ISH FW decides to send over DMA if ISHTP message is more than 3 IPC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) fragments and via IPC otherwise.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 3.3.4 Ring Buffers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) ^^^^^^^^^^^^^^^^^^
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) When a client initiate a connection, a ring or RX and TX buffers are allocated.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) The size of ring can be specified by the client. HID client set 16 and 32 for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) TX and RX buffers respectively. On send request from client, the data to be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) sent is copied to one of the send ring buffer and scheduled to be sent using
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) bus message protocol. These buffers are required because the FW may have not
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) have processed the last message and may not have enough flow control credits
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) to send. Same thing holds true on receive side and flow control is required.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 3.3.5 Host Enumeration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) ^^^^^^^^^^^^^^^^^^^^^^
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) The host enumeration bus command allow discovery of clients present in the FW.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) There can be multiple sensor clients and clients for calibration function.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) To ease in implantation and allow independent driver handle each client
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) this transport layer takes advantage of Linux Bus driver model. Each
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) client is registered as device on the transport bus (ishtp bus).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) Enumeration sequence of messages:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) - Host sends HOST_START_REQ_CMD, indicating that host ISHTP layer is up.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) - FW responds with HOST_START_RES_CMD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) - Host sends HOST_ENUM_REQ_CMD (enumerate FW clients)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) - FW responds with HOST_ENUM_RES_CMD that includes bitmap of available FW
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246)   client IDs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) - For each FW ID found in that bitmap host sends
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248)   HOST_CLIENT_PROPERTIES_REQ_CMD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) - FW responds with HOST_CLIENT_PROPERTIES_RES_CMD. Properties include UUID,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250)   max ISHTP message size, etc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) - Once host received properties for that last discovered client, it considers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252)   ISHTP device fully functional (and allocates DMA buffers)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) 3.4 HID over ISH Client
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) -----------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) Location: drivers/hid/intel-ish-hid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) The ISHTP client driver is responsible for:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) - enumerate HID devices under FW ISH client
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) - Get Report descriptor
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) - Register with HID core as a LL driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) - Process Get/Set feature request
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) - Get input reports
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 3.5 HID Sensor Hub MFD and IIO sensor drivers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) ---------------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) The functionality in these drivers is the same as an external sensor hub.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) Refer to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) Documentation/hid/hid-sensor.rst for HID sensor
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) Documentation/ABI/testing/sysfs-bus-iio for IIO ABIs to user space
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 3.6 End to End HID transport Sequence Diagram
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) ---------------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280)   HID-ISH-CLN                    ISHTP                    IPC                             HW
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282)           |                        |                       |-----WAKE UP------------------>|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284)           |                        |                       |-----HOST READY--------------->|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286)           |                        |                       |<----MNG_RESET_NOTIFY_ACK----- |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288)           |                        |<----ISHTP_START------ |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290)           |                        |<-----------------HOST_START_RES_CMD-------------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292)           |                        |------------------QUERY_SUBSCRIBER-------------------->|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294)           |                        |------------------HOST_ENUM_REQ_CMD------------------->|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296)           |                        |<-----------------HOST_ENUM_RES_CMD--------------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298)           |                        |------------------HOST_CLIENT_PROPERTIES_REQ_CMD------>|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300)           |                        |<-----------------HOST_CLIENT_PROPERTIES_RES_CMD-------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301)           |       Create new device on in ishtp bus        |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303)           |                        |------------------HOST_CLIENT_PROPERTIES_REQ_CMD------>|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305)           |                        |<-----------------HOST_CLIENT_PROPERTIES_RES_CMD-------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306)           |       Create new device on in ishtp bus        |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308)           |                        |--Repeat HOST_CLIENT_PROPERTIES_REQ_CMD-till last one--|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310)        probed()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311)           |----ishtp_cl_connect--->|----------------- CLIENT_CONNECT_REQ_CMD-------------->|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313)           |                        |<----------------CLIENT_CONNECT_RES_CMD----------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315)           |register event callback |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317)           |ishtp_cl_send(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318)           HOSTIF_DM_ENUM_DEVICES)  |----------fill ishtp_msg_hdr struct write to HW-----  >|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320)           |                        |                       |<-----IRQ(IPC_PROTOCOL_ISHTP---|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322)           |<--ENUM_DEVICE RSP------|                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324)   for each enumerated device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325)           |ishtp_cl_send(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326)           HOSTIF_GET_HID_DESCRIPTOR|----------fill ishtp_msg_hdr struct write to HW-----  >|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328)           ...Response
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330)   for each enumerated device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331)           |ishtp_cl_send(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332)        HOSTIF_GET_REPORT_DESCRIPTOR|--------------fill ishtp_msg_hdr struct write to HW-- >|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335)    hid_allocate_device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337)    hid_add_device                  |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338)           |                        |                       |                               |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) 3.7 ISH Debugging
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) -----------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) To debug ISH, event tracing mechanism is used. To enable debug logs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) echo 1 > /sys/kernel/debug/tracing/events/intel_ish/enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) cat sys/kernel/debug/tracing/trace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) 3.8 ISH IIO sysfs Example on Lenovo thinkpad Yoga 260
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) -----------------------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353)   root@otcpl-ThinkPad-Yoga-260:~# tree -l /sys/bus/iio/devices/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354)   /sys/bus/iio/devices/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355)   ├── iio:device0 -> ../../../devices/0044:8086:22D8.0001/HID-SENSOR-200073.9.auto/iio:device0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356)   │   ├── buffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357)   │   │   ├── enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358)   │   │   ├── length
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359)   │   │   └── watermark
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360)   ...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361)   │   ├── in_accel_hysteresis
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362)   │   ├── in_accel_offset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363)   │   ├── in_accel_sampling_frequency
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364)   │   ├── in_accel_scale
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365)   │   ├── in_accel_x_raw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366)   │   ├── in_accel_y_raw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367)   │   ├── in_accel_z_raw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368)   │   ├── name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369)   │   ├── scan_elements
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370)   │   │   ├── in_accel_x_en
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371)   │   │   ├── in_accel_x_index
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372)   │   │   ├── in_accel_x_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373)   │   │   ├── in_accel_y_en
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374)   │   │   ├── in_accel_y_index
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375)   │   │   ├── in_accel_y_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376)   │   │   ├── in_accel_z_en
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377)   │   │   ├── in_accel_z_index
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378)   │   │   └── in_accel_z_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379)   ...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380)   │   │   ├── devices
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381)   │   │   │   │   ├── buffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382)   │   │   │   │   │   ├── enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383)   │   │   │   │   │   ├── length
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384)   │   │   │   │   │   └── watermark
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385)   │   │   │   │   ├── dev
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386)   │   │   │   │   ├── in_intensity_both_raw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387)   │   │   │   │   ├── in_intensity_hysteresis
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388)   │   │   │   │   ├── in_intensity_offset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389)   │   │   │   │   ├── in_intensity_sampling_frequency
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390)   │   │   │   │   ├── in_intensity_scale
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391)   │   │   │   │   ├── name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392)   │   │   │   │   ├── scan_elements
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393)   │   │   │   │   │   ├── in_intensity_both_en
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394)   │   │   │   │   │   ├── in_intensity_both_index
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395)   │   │   │   │   │   └── in_intensity_both_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396)   │   │   │   │   ├── trigger
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397)   │   │   │   │   │   └── current_trigger
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398)   ...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399)   │   │   │   │   ├── buffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400)   │   │   │   │   │   ├── enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401)   │   │   │   │   │   ├── length
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402)   │   │   │   │   │   └── watermark
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403)   │   │   │   │   ├── dev
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404)   │   │   │   │   ├── in_magn_hysteresis
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405)   │   │   │   │   ├── in_magn_offset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406)   │   │   │   │   ├── in_magn_sampling_frequency
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407)   │   │   │   │   ├── in_magn_scale
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408)   │   │   │   │   ├── in_magn_x_raw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409)   │   │   │   │   ├── in_magn_y_raw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410)   │   │   │   │   ├── in_magn_z_raw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411)   │   │   │   │   ├── in_rot_from_north_magnetic_tilt_comp_raw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412)   │   │   │   │   ├── in_rot_hysteresis
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413)   │   │   │   │   ├── in_rot_offset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414)   │   │   │   │   ├── in_rot_sampling_frequency
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415)   │   │   │   │   ├── in_rot_scale
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416)   │   │   │   │   ├── name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417)   ...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418)   │   │   │   │   ├── scan_elements
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419)   │   │   │   │   │   ├── in_magn_x_en
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420)   │   │   │   │   │   ├── in_magn_x_index
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421)   │   │   │   │   │   ├── in_magn_x_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422)   │   │   │   │   │   ├── in_magn_y_en
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423)   │   │   │   │   │   ├── in_magn_y_index
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424)   │   │   │   │   │   ├── in_magn_y_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425)   │   │   │   │   │   ├── in_magn_z_en
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426)   │   │   │   │   │   ├── in_magn_z_index
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427)   │   │   │   │   │   ├── in_magn_z_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428)   │   │   │   │   │   ├── in_rot_from_north_magnetic_tilt_comp_en
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429)   │   │   │   │   │   ├── in_rot_from_north_magnetic_tilt_comp_index
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430)   │   │   │   │   │   └── in_rot_from_north_magnetic_tilt_comp_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431)   │   │   │   │   ├── trigger
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432)   │   │   │   │   │   └── current_trigger
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433)   ...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434)   │   │   │   │   ├── buffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435)   │   │   │   │   │   ├── enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436)   │   │   │   │   │   ├── length
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437)   │   │   │   │   │   └── watermark
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438)   │   │   │   │   ├── dev
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439)   │   │   │   │   ├── in_anglvel_hysteresis
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440)   │   │   │   │   ├── in_anglvel_offset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441)   │   │   │   │   ├── in_anglvel_sampling_frequency
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442)   │   │   │   │   ├── in_anglvel_scale
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443)   │   │   │   │   ├── in_anglvel_x_raw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444)   │   │   │   │   ├── in_anglvel_y_raw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445)   │   │   │   │   ├── in_anglvel_z_raw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446)   │   │   │   │   ├── name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447)   │   │   │   │   ├── scan_elements
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448)   │   │   │   │   │   ├── in_anglvel_x_en
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449)   │   │   │   │   │   ├── in_anglvel_x_index
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450)   │   │   │   │   │   ├── in_anglvel_x_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451)   │   │   │   │   │   ├── in_anglvel_y_en
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452)   │   │   │   │   │   ├── in_anglvel_y_index
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453)   │   │   │   │   │   ├── in_anglvel_y_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454)   │   │   │   │   │   ├── in_anglvel_z_en
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455)   │   │   │   │   │   ├── in_anglvel_z_index
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456)   │   │   │   │   │   └── in_anglvel_z_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457)   │   │   │   │   ├── trigger
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458)   │   │   │   │   │   └── current_trigger
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459)   ...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460)   │   │   │   │   ├── buffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461)   │   │   │   │   │   ├── enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462)   │   │   │   │   │   ├── length
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463)   │   │   │   │   │   └── watermark
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464)   │   │   │   │   ├── dev
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465)   │   │   │   │   ├── in_anglvel_hysteresis
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466)   │   │   │   │   ├── in_anglvel_offset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467)   │   │   │   │   ├── in_anglvel_sampling_frequency
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468)   │   │   │   │   ├── in_anglvel_scale
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469)   │   │   │   │   ├── in_anglvel_x_raw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470)   │   │   │   │   ├── in_anglvel_y_raw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471)   │   │   │   │   ├── in_anglvel_z_raw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472)   │   │   │   │   ├── name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473)   │   │   │   │   ├── scan_elements
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474)   │   │   │   │   │   ├── in_anglvel_x_en
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475)   │   │   │   │   │   ├── in_anglvel_x_index
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476)   │   │   │   │   │   ├── in_anglvel_x_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477)   │   │   │   │   │   ├── in_anglvel_y_en
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478)   │   │   │   │   │   ├── in_anglvel_y_index
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479)   │   │   │   │   │   ├── in_anglvel_y_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480)   │   │   │   │   │   ├── in_anglvel_z_en
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481)   │   │   │   │   │   ├── in_anglvel_z_index
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482)   │   │   │   │   │   └── in_anglvel_z_type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483)   │   │   │   │   ├── trigger
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484)   │   │   │   │   │   └── current_trigger
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485)   ...