|
|
|
@ -305,6 +305,215 @@ static const __le32 iwl_bt_mprio_lut[BT_COEX_MULTI_PRIO_LUT_SIZE] = {
|
|
|
|
|
cpu_to_le32(0x33113311),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct corunning_block_luts {
|
|
|
|
|
u8 range;
|
|
|
|
|
__le32 lut20[BT_COEX_CORUN_LUT_SIZE];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Ranges for the antenna coupling calibration / co-running block LUT:
|
|
|
|
|
* LUT0: [ 0, 12[
|
|
|
|
|
* LUT1: [12, 20[
|
|
|
|
|
* LUT2: [20, 21[
|
|
|
|
|
* LUT3: [21, 23[
|
|
|
|
|
* LUT4: [23, 27[
|
|
|
|
|
* LUT5: [27, 30[
|
|
|
|
|
* LUT6: [30, 32[
|
|
|
|
|
* LUT7: [32, 33[
|
|
|
|
|
* LUT8: [33, - [
|
|
|
|
|
*/
|
|
|
|
|
static const struct corunning_block_luts antenna_coupling_ranges[] = {
|
|
|
|
|
{
|
|
|
|
|
.range = 0,
|
|
|
|
|
.lut20 = {
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.range = 12,
|
|
|
|
|
.lut20 = {
|
|
|
|
|
cpu_to_le32(0x00000001), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.range = 20,
|
|
|
|
|
.lut20 = {
|
|
|
|
|
cpu_to_le32(0x00000002), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.range = 21,
|
|
|
|
|
.lut20 = {
|
|
|
|
|
cpu_to_le32(0x00000003), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.range = 23,
|
|
|
|
|
.lut20 = {
|
|
|
|
|
cpu_to_le32(0x00000004), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.range = 27,
|
|
|
|
|
.lut20 = {
|
|
|
|
|
cpu_to_le32(0x00000005), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.range = 30,
|
|
|
|
|
.lut20 = {
|
|
|
|
|
cpu_to_le32(0x00000006), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.range = 32,
|
|
|
|
|
.lut20 = {
|
|
|
|
|
cpu_to_le32(0x00000007), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.range = 33,
|
|
|
|
|
.lut20 = {
|
|
|
|
|
cpu_to_le32(0x00000008), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
cpu_to_le32(0x00000000), cpu_to_le32(0x00000000),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static enum iwl_bt_coex_lut_type
|
|
|
|
|
iwl_get_coex_type(struct iwl_mvm *mvm, const struct ieee80211_vif *vif)
|
|
|
|
|
{
|
|
|
|
@ -390,8 +599,6 @@ int iwl_send_bt_init_conf(struct iwl_mvm *mvm)
|
|
|
|
|
BT_VALID_LUT |
|
|
|
|
|
BT_VALID_WIFI_RX_SW_PRIO_BOOST |
|
|
|
|
|
BT_VALID_WIFI_TX_SW_PRIO_BOOST |
|
|
|
|
|
BT_VALID_CORUN_LUT_20 |
|
|
|
|
|
BT_VALID_CORUN_LUT_40 |
|
|
|
|
|
BT_VALID_ANT_ISOLATION |
|
|
|
|
|
BT_VALID_ANT_ISOLATION_THRS |
|
|
|
|
|
BT_VALID_TXTX_DELTA_FREQ_THRS |
|
|
|
|
@ -401,6 +608,12 @@ int iwl_send_bt_init_conf(struct iwl_mvm *mvm)
|
|
|
|
|
if (IWL_MVM_BT_COEX_SYNC2SCO)
|
|
|
|
|
bt_cmd->flags |= cpu_to_le32(BT_COEX_SYNC2SCO);
|
|
|
|
|
|
|
|
|
|
if (IWL_MVM_BT_COEX_CORUNNING) {
|
|
|
|
|
bt_cmd->valid_bit_msk = cpu_to_le32(BT_VALID_CORUN_LUT_20 |
|
|
|
|
|
BT_VALID_CORUN_LUT_40);
|
|
|
|
|
bt_cmd->flags |= cpu_to_le32(BT_COEX_CORUNNING);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (mvm->cfg->bt_shared_single_ant)
|
|
|
|
|
memcpy(&bt_cmd->decision_lut, iwl_single_shared_ant,
|
|
|
|
|
sizeof(iwl_single_shared_ant));
|
|
|
|
@ -408,6 +621,12 @@ int iwl_send_bt_init_conf(struct iwl_mvm *mvm)
|
|
|
|
|
memcpy(&bt_cmd->decision_lut, iwl_combined_lookup,
|
|
|
|
|
sizeof(iwl_combined_lookup));
|
|
|
|
|
|
|
|
|
|
/* Take first Co-running block LUT to get started */
|
|
|
|
|
memcpy(bt_cmd->bt4_corun_lut20, antenna_coupling_ranges[0].lut20,
|
|
|
|
|
sizeof(bt_cmd->bt4_corun_lut20));
|
|
|
|
|
memcpy(bt_cmd->bt4_corun_lut40, antenna_coupling_ranges[0].lut20,
|
|
|
|
|
sizeof(bt_cmd->bt4_corun_lut40));
|
|
|
|
|
|
|
|
|
|
memcpy(&bt_cmd->bt_prio_boost, iwl_bt_prio_boost,
|
|
|
|
|
sizeof(iwl_bt_prio_boost));
|
|
|
|
|
memcpy(&bt_cmd->bt4_multiprio_lut, iwl_bt_mprio_lut,
|
|
|
|
@ -498,7 +717,7 @@ int iwl_mvm_bt_coex_reduced_txp(struct iwl_mvm *mvm, u8 sta_id, bool enable)
|
|
|
|
|
struct iwl_host_cmd cmd = {
|
|
|
|
|
.id = BT_CONFIG,
|
|
|
|
|
.len = { sizeof(*bt_cmd), },
|
|
|
|
|
.dataflags = { IWL_HCMD_DFL_DUP, },
|
|
|
|
|
.dataflags = { IWL_HCMD_DFL_NOCOPY, },
|
|
|
|
|
.flags = CMD_ASYNC,
|
|
|
|
|
};
|
|
|
|
|
struct iwl_mvm_sta *mvmsta;
|
|
|
|
@ -993,3 +1212,69 @@ void iwl_mvm_bt_coex_vif_change(struct iwl_mvm *mvm)
|
|
|
|
|
|
|
|
|
|
iwl_mvm_bt_coex_notif_handle(mvm);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int iwl_mvm_rx_ant_coupling_notif(struct iwl_mvm *mvm,
|
|
|
|
|
struct iwl_rx_cmd_buffer *rxb,
|
|
|
|
|
struct iwl_device_cmd *dev_cmd)
|
|
|
|
|
{
|
|
|
|
|
struct iwl_rx_packet *pkt = rxb_addr(rxb);
|
|
|
|
|
u32 ant_isolation = le32_to_cpup((void *)pkt->data);
|
|
|
|
|
u8 __maybe_unused lower_bound, upper_bound;
|
|
|
|
|
u8 lut;
|
|
|
|
|
|
|
|
|
|
struct iwl_bt_coex_cmd *bt_cmd;
|
|
|
|
|
struct iwl_host_cmd cmd = {
|
|
|
|
|
.id = BT_CONFIG,
|
|
|
|
|
.len = { sizeof(*bt_cmd), },
|
|
|
|
|
.dataflags = { IWL_HCMD_DFL_NOCOPY, },
|
|
|
|
|
.flags = CMD_SYNC,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (!IWL_MVM_BT_COEX_CORUNNING)
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
lockdep_assert_held(&mvm->mutex);
|
|
|
|
|
|
|
|
|
|
if (ant_isolation == mvm->last_ant_isol)
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
for (lut = 0; lut < ARRAY_SIZE(antenna_coupling_ranges) - 1; lut++)
|
|
|
|
|
if (ant_isolation < antenna_coupling_ranges[lut + 1].range)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
lower_bound = antenna_coupling_ranges[lut].range;
|
|
|
|
|
|
|
|
|
|
if (lut < ARRAY_SIZE(antenna_coupling_ranges) - 1)
|
|
|
|
|
upper_bound = antenna_coupling_ranges[lut + 1].range;
|
|
|
|
|
else
|
|
|
|
|
upper_bound = antenna_coupling_ranges[lut].range;
|
|
|
|
|
|
|
|
|
|
IWL_DEBUG_COEX(mvm, "Antenna isolation=%d in range [%d,%d[, lut=%d\n",
|
|
|
|
|
ant_isolation, lower_bound, upper_bound, lut);
|
|
|
|
|
|
|
|
|
|
mvm->last_ant_isol = ant_isolation;
|
|
|
|
|
|
|
|
|
|
if (mvm->last_corun_lut == lut)
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
mvm->last_corun_lut = lut;
|
|
|
|
|
|
|
|
|
|
bt_cmd = kzalloc(sizeof(*bt_cmd), GFP_KERNEL);
|
|
|
|
|
if (!bt_cmd)
|
|
|
|
|
return 0;
|
|
|
|
|
cmd.data[0] = bt_cmd;
|
|
|
|
|
|
|
|
|
|
bt_cmd->flags = cpu_to_le32(BT_COEX_NW);
|
|
|
|
|
bt_cmd->valid_bit_msk |= cpu_to_le32(BT_VALID_ENABLE |
|
|
|
|
|
BT_VALID_CORUN_LUT_20 |
|
|
|
|
|
BT_VALID_CORUN_LUT_40);
|
|
|
|
|
|
|
|
|
|
/* For the moment, use the same LUT for 20GHz and 40GHz */
|
|
|
|
|
memcpy(bt_cmd->bt4_corun_lut20, antenna_coupling_ranges[lut].lut20,
|
|
|
|
|
sizeof(bt_cmd->bt4_corun_lut20));
|
|
|
|
|
|
|
|
|
|
memcpy(bt_cmd->bt4_corun_lut40, antenna_coupling_ranges[lut].lut20,
|
|
|
|
|
sizeof(bt_cmd->bt4_corun_lut40));
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|