1 /******************************************************************************
2  *
3  *  Copyright (C) 2015 Motorola Corporation
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 
19 /******************************************************************************
20  *
21  *  Filename:      bt_vendor_brcm_a2dp.h
22  *
23  *  Description:   Contains definitions specific for interfacing with Broadcom
24  *                 Bluetooth chipsets for A2DP Offload implementation.
25  *
26  ******************************************************************************/
27 
28 #ifndef BT_VENDOR_BRCM_A2DP_H
29 #define BT_VENDOR_BRCM_A2DP_H
30 
31 #include "bt_vendor_brcm.h"
32 #include "bt_target.h"
33 #include "uipc_msg.h"
34 
35 /******************************************************************************
36 **  Constants & Macros
37 ******************************************************************************/
38 
39 #define HCI_VSC_WRITE_PCM_PINS  0xFC61
40 #define HCI_VSC_READ_PCM_PINS   0xFC62
41 #define HCI_VSC_UIPC_OVER_HCI   0xFC8B
42 
43 /* pinmux for I2S pins */
44 #define PCM_PIN_FCN_GPIO 0x00
45 #define PCM_PIN_FCN_PCM  0x01
46 #define PCM_PIN_FCN_I2S_MASTER 0x05
47 #define PCM_PIN_FCN_I2S_SLAVE  0x07
48 #define PCM_PIN_FCN_INVALID    0xFF
49 
50 /* PADCONF for I2S pins */
51 /* From LSB, byte map to DIN, DOUT, WS, CLK */
52 /*
53 bit 0:   0 OUTPUT, 1 INPUT
54 bit 1:   0 NO-PULL,1 PULL-UP
55 bit 2:   0 NO-PULL,1 PULL-DN
56 bit 3:   1 SHMITT Trigger Enable
57 bit 4-7:   Drive Strength
58 */
59 /* Define standard Master & Slave I2S PADCONFs */
60 #define PCM_PIN_PADCNF_I2S_SLAVE  0x19191819
61 #define PCM_PIN_PADCNF_I2S_MASTER 0x18181819
62 
63 #define HCI_EVT_CMD_CMPL_LEN    1
64 #define HCI_EVT_CMD_CMPL_VSC    3
65 #define HCI_CMD_PREAMBLE_SIZE   3
66 #define HCI_CMD_MAX_LEN         258
67 
68 #define UNUSED(x) (void)(x)
69 
70 #if (BRCM_A2DP_OFFLOAD != TRUE)
71 #define BRCM_A2DP_OFFLOAD    FALSE
72 #endif
73 
74 /* A2DP offload parameters from vnd_<prod>.txt */
75 
76 #ifndef BRCM_A2DP_OFFLOAD_SRC
77 #define BRCM_A2DP_OFFLOAD_SRC  AUDIO_ROUTE_SRC_I2S
78 #endif
79 
80 #ifndef BRCM_A2DP_OFFLOAD_SRC_SF
81 #define BRCM_A2DP_OFFLOAD_SRC_SF  AUDIO_ROUTE_SF_48K
82 #endif
83 
84 #ifndef BRCM_A2DP_OFFLOAD_MAX_BITPOOL
85 /* High quality setting @ 44.1 kHz */
86 #define BRCM_A2DP_OFFLOAD_MAX_BITPOOL 53
87 #endif
88 
89 #ifndef BRCM_A2DP_OFFLOAD_PCM_PIN_FCN
90 #define BRCM_A2DP_OFFLOAD_PCM_PIN_FCN PCM_PIN_FCN_I2S_SLAVE
91 #endif
92 
93 #ifndef BRCM_A2DP_OFFLOAD_PCM_PIN_PADCNF
94 #if (BRCM_A2DP_OFFLOAD_PCM_PIN_FCN == PCM_PIN_FCN_I2S_MASTER)
95 #define BRCM_A2DP_OFFLOAD_PCM_PIN_PADCNF  PCM_PIN_PADCNF_I2S_MASTER
96 #else
97 #define BRCM_A2DP_OFFLOAD_PCM_PIN_PADCNF  PCM_PIN_PADCNF_I2S_SLAVE
98 #endif
99 #endif
100 
101 #define MULTI_BIT_SET(x) !!(x & (x - 1))
102 
103 void brcm_vnd_a2dp_init();
104 int brcm_vnd_a2dp_execute(bt_vendor_opcode_t, void *ev_data);
105 
106 #endif /*BT_VENDOR_BRCM_A2DP_H*/
107