^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) ...