Skip to content
  • Loic Poulain's avatar
    Bluetooth: btintel: Add iBT register access over HCI support · d06f107b
    Loic Poulain authored
    
    
    Add regmap ibt to support Intel Bluetooth silicon register access
    over HCI. Intel BT/FM combo chip allows to read/write some registers
    (e.g. FM registers) via its HCI interface.
    
    Read/Write operations are performed via a HCI transaction composed of
    a HCI command (host->controller) followed by a HCI command complete
    event (controller->host). Read/Write Command opcodes can be specified
    to the regmap init function.
    We define data formats which are intel/vendor specific.
    
    Register Read/Write HCI command payload (Host):
    Field: | REG ADDR | MODE | DATA_LEN | DATA... |
    size:  |   32b    |  8b  |    8b    |  8b*    |
    
    Register Read HCI command complete event payload (Controller):
    Field: | CMD STATUS | REG ADDR | DATA... |
    size:  |     8b     |   32b    |  8b*    |
    
    Register Write HCI command complete event payload (Controller):
    Field: | CMD_STATUS |
    size:  |     8b     |
    
    Since this payload is HCI encapsulated, Little Endian byte order is
    used.
    
    Write/Read Example:
    
    If we write 0x0000002a at address 0x00008c04, with opcode_write 0xfc5d,
    The resulting transaction is (btmon trace):
    
    < HCI Command (0x3f|0x005d) plen 10 [hci0]
            04 8c 00 00 02 04 2a 00 00 00
    > HCI Event (0x0e) plen 4
          Unknown (0x3f|0x005d) ncmd 1
            00
    
    Then, if we read the same register with opcode_read 0xfc5e:
    
    < HCI Command (0x3f|0x005e) plen 6 [hci0]
            04 8c 00 00 02 04
    > HCI Event (0x0e) plen 12 [hci0]
          Unknown (0x3f|0x005e) ncmd 1
            00 04 8c 00 00 2a 00 00 00
    
    Signed-off-by: default avatarLoic Poulain <loic.poulain@intel.com>
    Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
    d06f107b