Loic Poulain d06f107bcd Bluetooth: btintel: Add iBT register access over HCI support
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: Loic Poulain <loic.poulain@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
2015-10-03 19:03:15 +02:00
..
2015-09-08 18:19:17 -07:00
2015-09-08 16:48:55 -07:00
2015-09-08 18:19:17 -07:00
2015-09-10 17:59:04 -07:00
2015-09-04 11:35:03 -07:00
2015-09-04 11:10:18 -07:00
2015-08-31 15:49:19 -07:00
2015-08-15 22:10:26 -04:00
2015-09-08 17:22:35 -07:00
2015-09-08 14:35:59 -07:00
2015-09-03 16:41:38 -07:00
2015-09-05 17:52:22 -07:00
2015-09-08 17:22:35 -07:00
2015-09-08 16:33:16 -07:00
2015-09-09 11:17:33 -07:00
2015-09-24 20:39:37 +02:00
2015-09-08 14:35:59 -07:00
2015-09-08 16:26:18 -07:00
2015-09-09 10:55:32 -07:00
2015-09-08 16:48:55 -07:00
2015-09-05 19:37:31 +02:00
2015-09-10 17:59:04 -07:00
2015-09-08 16:48:55 -07:00
2015-09-04 11:35:03 -07:00