diff options
author | PixelBot AutoMerger <android-nexus-securitybot@system.gserviceaccount.com> | 2023-03-26 19:16:05 -0700 |
---|---|---|
committer | SecurityBot <android-nexus-securitybot@system.gserviceaccount.com> | 2023-03-26 19:16:05 -0700 |
commit | 2103b5afedd5b047a61a3625fdb6b312d97d0819 (patch) | |
tree | c8e33bae0fc090b300ccfaf9f4852c1b9d280414 | |
parent | 77059fcfbfc9bcfb4fff2de59d2133d4ef0eaf69 (diff) | |
parent | 0457964d772872a2b8e8c5be2b0891e844d121a2 (diff) | |
download | uwb-2103b5afedd5b047a61a3625fdb6b312d97d0819.tar.gz |
Merge android13-gs-pixel-5.10-tm-qpr3 into android13-gs-pixel-5.10-udc
SBMerger: 516612970
Change-Id: If0776591f98cd9ddb79af1dbce36bff18dd6169b
Signed-off-by: SecurityBot <android-nexus-securitybot@system.gserviceaccount.com>
-rw-r--r-- | kernel/drivers/net/ieee802154/dw3000_calib.c | 30 | ||||
-rw-r--r-- | kernel/drivers/net/ieee802154/dw3000_core.c | 25 | ||||
-rw-r--r-- | kernel/drivers/net/ieee802154/dw3000_mcps.c | 4 | ||||
-rw-r--r-- | mac/fira_session.c | 9 |
4 files changed, 38 insertions, 30 deletions
diff --git a/kernel/drivers/net/ieee802154/dw3000_calib.c b/kernel/drivers/net/ieee802154/dw3000_calib.c index 31bd4a7..2527486 100644 --- a/kernel/drivers/net/ieee802154/dw3000_calib.c +++ b/kernel/drivers/net/ieee802154/dw3000_calib.c @@ -312,13 +312,17 @@ int dw3000_calib_update_config(struct dw3000 *dw) ant_rf1 = config->ant[0]; ant_rf2 = config->ant[1]; - /* At least, RF1 port must have a valid antenna */ - if (ant_rf1 < 0) + if (ant_rf1 < 0 && ant_rf2 < 0) { /* Not configured yet, does nothing. */ return 0; - if (ant_rf1 >= ANTMAX) + } + /* Since both calibs can be used at this time, both needs to be safe. */ + if (ant_rf1 >= ANTMAX || ant_rf2 >= ANTMAX) return -1; - ant_calib = &dw->calib_data.ant[ant_rf1]; + if (ant_rf1 >= 0) + ant_calib = &dw->calib_data.ant[ant_rf1]; + else + ant_calib = &dw->calib_data.ant[ant_rf2]; /* Convert config into index of array. */ chanidx = config->chan == 9 ? DW3000_CALIBRATION_CHANNEL_9 : @@ -345,16 +349,16 @@ int dw3000_calib_update_config(struct dw3000 *dw) /* Early exit if RF2 isn't configured yet. */ if (ant_rf2 < 0) return 0; - if (ant_rf2 >= ANTMAX) - return -EINVAL; - /* RF2 port has a valid antenna, so antpair can be used */ - antpair = ant_rf2 > ant_rf1 ? ANTPAIR_IDX(ant_rf1, ant_rf2) : - ANTPAIR_IDX(ant_rf2, ant_rf1); - antpair_calib = &dw->calib_data.antpair[antpair]; - /* Update PDOA offset */ - config->pdoaOffset = antpair_calib->ch[chanidx].pdoa_offset; - config->pdoaLut = &antpair_calib->ch[chanidx].pdoa_lut; + if (ant_rf1 >= 0 && ant_rf2 >= 0) { + /* RF2 and RF1 port has a valid antenna, so antpair can be used */ + antpair = ant_rf2 > ant_rf1 ? ANTPAIR_IDX(ant_rf1, ant_rf2) : + ANTPAIR_IDX(ant_rf2, ant_rf1); + antpair_calib = &dw->calib_data.antpair[antpair]; + /* Update PDOA offset */ + config->pdoaOffset = antpair_calib->ch[chanidx].pdoa_offset; + config->pdoaLut = &antpair_calib->ch[chanidx].pdoa_lut; + } /* Smart TX power */ /* When deactivated, reset register to default value (if change occurs while already started) */ diff --git a/kernel/drivers/net/ieee802154/dw3000_core.c b/kernel/drivers/net/ieee802154/dw3000_core.c index 0c2c7f6..7772f16 100644 --- a/kernel/drivers/net/ieee802154/dw3000_core.c +++ b/kernel/drivers/net/ieee802154/dw3000_core.c @@ -1418,11 +1418,11 @@ static int dw3000_change_tx_rf_port(struct dw3000 *dw, bool use_rf2) static int dw3000_change_rx_rf_port(struct dw3000 *dw, bool use_rf2) { int rc = 0; - u32 val = DW3000_TXRXSWITCH_AUTO; - - if (use_rf2) { - val |= DW3000_RF_SWITCH_RX_RF2; - } + u32 val = DW3000_TXRXSWITCH_AUTO | + ((u32)use_rf2 + << DW3000_RF_SWITCH_CTRL_ANT_TXRX_RXPORT_BIT_OFFSET) | + ((u32)use_rf2 + << DW3000_RF_SWITCH_CTRL_ANT_TXRX_MODE_OVR_BIT_OFFSET); rc = dw3000_reg_write32(dw, DW3000_RF_SWITCH_CTRL_ID, 0, val); if (!rc) dw->rx_rf2 = use_rf2; @@ -6471,13 +6471,14 @@ int dw3000_set_tx_antenna(struct dw3000 *dw, int ant_set_id) ant_set_id); return -EINVAL; } - /* Early return if no change */ - if (ant_idx1 == config->ant[0]) - return 0; /* Retrieve antenna GPIO configuration from calibration data */ ant_calib = &dw->calib_data.ant[ant_idx1]; + /* Early return if no change */ + if (ant_idx1 == config->ant[ant_calib->port]) + return 0; + /* switching to RF2 port for TX if necessary */ - if (ant_calib->port == 1 || dw->tx_rf2) + if ((ant_calib->port == 1) || (dw->tx_rf2)) dw3000_change_tx_rf_port(dw, ant_calib->port == 1); /* Set GPIO state according config to select this antenna */ @@ -6522,12 +6523,6 @@ int dw3000_set_rx_antennas(struct dw3000 *dw, int ant_set_id, bool pdoa_enabled, port = ant_calib->port; /* Save port for later check */ if (((ant_calib->port == 1) || dw->rx_rf2) && ant_idx2 < 0) { dw3000_change_rx_rf_port(dw, true); - } else if (ant_calib->port == 1 && ant_idx2 > 0) { - if (frame_idx == 5) { - dw3000_change_rx_rf_port(dw, true); - } else { - dw3000_change_rx_rf_port(dw, false); - } } else { dw3000_change_rx_rf_port(dw, false); } diff --git a/kernel/drivers/net/ieee802154/dw3000_mcps.c b/kernel/drivers/net/ieee802154/dw3000_mcps.c index f1810a7..c9365b2 100644 --- a/kernel/drivers/net/ieee802154/dw3000_mcps.c +++ b/kernel/drivers/net/ieee802154/dw3000_mcps.c @@ -86,11 +86,11 @@ tx_rmarker_offset(struct dw3000 *dw, return 0; } + ant_calib = &dw->calib_data.ant[ant_idx1]; /* Current configured ant_id. */ - if (ant_idx1 == config->ant[0]) + if (ant_idx1 == config->ant[ant_calib->port]) return config->rmarkerOffset; - ant_calib = &dw->calib_data.ant[ant_idx1]; chanidx = chan == 9 ? DW3000_CALIBRATION_CHANNEL_9 : DW3000_CALIBRATION_CHANNEL_5; diff --git a/mac/fira_session.c b/mac/fira_session.c index e5f2e3a..15f3b20 100644 --- a/mac/fira_session.c +++ b/mac/fira_session.c @@ -1117,6 +1117,15 @@ static bool range_data_notif_update(struct fira_local *local, ri->short_addr); fira_session_set_range_data_ntf_status(session, ri); + if (!controlee) { + /* + * This case can happen in Contention Based mode. + * In this mode, controlees are unknown. Let's notify. + */ + ri->notify = true; + send_report = true; + continue; + } ctlee_status = controlee->range_data_ntf_status; ri->notify = send_ranging_data( config, ri->range_data_ntf_status, |