diff options
author | Alex Hong <rurumihong@google.com> | 2021-11-04 00:21:23 +0800 |
---|---|---|
committer | Alex Hong <rurumihong@google.com> | 2021-11-04 00:22:06 +0800 |
commit | 3879dfec0ccfe8d8a9a26fccb1a068ad62101f31 (patch) | |
tree | 76592dd884ce26255e41c85e25980e366327f2ba | |
parent | 4e6a12e75d39628a89db6e70629c7e1324167ec8 (diff) | |
parent | 054af86ad5e1ffb3b8c3ce901d74c0eda9beb897 (diff) | |
download | uwb-3879dfec0ccfe8d8a9a26fccb1a068ad62101f31.tar.gz |
Merge android12-gs-pixel-5.10-sc-v2 into android13-gs-pixel-5.10
Bug: 199698959
Change-Id: Ic422a961efceee5204368ae118fb46346d39db18
Signed-off-by: Alex Hong <rurumihong@google.com>
-rw-r--r-- | kernel/drivers/net/ieee802154/dw3000_core.c | 57 | ||||
-rw-r--r-- | kernel/drivers/net/ieee802154/dw3000_spi.c | 2 | ||||
-rw-r--r-- | kernel/drivers/net/ieee802154/dw3000_stm.c | 4 |
3 files changed, 30 insertions, 33 deletions
diff --git a/kernel/drivers/net/ieee802154/dw3000_core.c b/kernel/drivers/net/ieee802154/dw3000_core.c index 4360356..2b116ca 100644 --- a/kernel/drivers/net/ieee802154/dw3000_core.c +++ b/kernel/drivers/net/ieee802154/dw3000_core.c @@ -3904,9 +3904,22 @@ static int dw3000_setdwstate(struct dw3000 *dw, enum operational_state state) /* Store the current DTU */ dw->sleep_enter_dtu = dw3000_get_dtu_time(dw); trace_dw3000_deep_sleep_enter(dw, dw->sleep_enter_dtu); - /** - * Set up the deep sleep configuration: - * Step 1: + /* + * Set up the deep sleep configuration + */ + /* Step 1: + * - enable configuration copy from AON memory to host registers. + * - set ONW_GO2IDLE to get DW3000_OP_STATE_IDLE_PLL on wakeup. + */ + rc = dw3000_reg_write16( + dw, DW3000_AON_DIG_CFG_ID, 0, + dw->data.sleep_mode | + DW3000_AON_DIG_CFG_ONW_AONDLD_MASK | + DW3000_AON_DIG_CFG_ONW_GO2IDLE_MASK); + if (rc) + return rc; + /* + * Step 2: * - enable the sleep configuration bit. * - disable sleep counter to get deep sleep. * - enable wake up using SPI access. @@ -3916,45 +3929,29 @@ static int dw3000_setdwstate(struct dw3000 *dw, enum operational_state state) DW3000_AON_WAKE_CSN_MASK); if (rc) return rc; - /* Step 2: Set INIT2IDLE bit, to get DW3000_OP_STATE_IDLE_PLL on wakeup. */ + /* + * Step 3 + * - Set INIT2IDLE bit, to get DW3000_OP_STATE_IDLE_PLL on wakeup. + */ rc = dw3000_reg_or8(dw, DW3000_SEQ_CTRL_ID, 0x01, DW3000_SEQ_CTRL_AUTO_INIT2IDLE_BIT_MASK >> 8); if (rc) return rc; - /* Step 3: - * - enable configuration copy from AON memory to host registers. - * - set ONW_GO2IDLE to get DW3000_OP_STATE_IDLE_PLL on wakeup. + /* Step 4 + * - backup ALL registers to AON memory (include AON config block) + * - and enter DEEP-SLEEP */ - rc = dw3000_reg_or16( - dw, DW3000_AON_DIG_CFG_ID, 0, - dw->data.sleep_mode | - DW3000_AON_DIG_CFG_ONW_AONDLD_MASK | - DW3000_AON_DIG_CFG_ONW_GO2IDLE_MASK); + rc = dw3000_reg_write8(dw, DW3000_AON_CTRL_ID, 0, 0); if (rc) return rc; - /* Step 4: backup ALL registers to AON memory */ rc = dw3000_reg_write8(dw, DW3000_AON_CTRL_ID, 0, DW3000_AON_CTRL_ARRAY_UPLOAD_BIT_MASK); if (rc) return rc; - /* Loop until backup is complete (bit has been reset) */ - do { - u8 val; - udelay(10); - rc = dw3000_reg_read8(dw, DW3000_AON_CTRL_ID, 0, &val); - if (rc) - return rc; - if (val & DW3000_AON_CTRL_ARRAY_UPLOAD_BIT_MASK) - rc = -EAGAIN; - } while (rc); - /* Step 5: Upload the AON block configurations to the AON to go in DW3000_OP_STATE_DEEP_SLEEP. */ - rc = dw3000_reg_or8(dw, DW3000_AON_CTRL_ID, 0, - DW3000_AON_CTRL_CONFIG_UPLOAD_BIT_MASK); - if (rc) - return rc; - /* Step 6: Here the chip is in DW3000_OP_STATE_DEEP_SLEEP. - * Update power statistics and operational state. + /* Step 5 + * Here the chip is in DW3000_OP_STATE_DEEP_SLEEP so now + * update power statistics and operational state. */ dw3000_power_stats(dw, DW3000_PWR_DEEPSLEEP, 0); dw3000_set_operational_state(dw, DW3000_OP_STATE_DEEP_SLEEP); diff --git a/kernel/drivers/net/ieee802154/dw3000_spi.c b/kernel/drivers/net/ieee802154/dw3000_spi.c index 11f3927..f4d73b7 100644 --- a/kernel/drivers/net/ieee802154/dw3000_spi.c +++ b/kernel/drivers/net/ieee802154/dw3000_spi.c @@ -123,7 +123,7 @@ static int dw3000_spi_probe(struct spi_device *spi) } dw->sp0_rx_antenna = dw3000_sp0_rx_antenna; - dev_info(dw->dev, "Loading driver vP2-S4-1-21091301"); + dev_info(dw->dev, "Loading driver UWBM-2.2.2-21102101"); dw3000_sysfs_init(dw); /* Setup SPI parameters */ diff --git a/kernel/drivers/net/ieee802154/dw3000_stm.c b/kernel/drivers/net/ieee802154/dw3000_stm.c index 4b0f1cb..0fb84b8 100644 --- a/kernel/drivers/net/ieee802154/dw3000_stm.c +++ b/kernel/drivers/net/ieee802154/dw3000_stm.c @@ -87,8 +87,8 @@ int dw3000_enqueue_generic(struct dw3000 *dw, struct dw3000_stm_command *cmd) stm->pending_work |= work; stm->generic_work = cmd; wake_up_locked(&stm->work_wq); - wait_event_interruptible_locked_irq(stm->work_wq, - !(stm->pending_work & work)); + while (-ERESTARTSYS == wait_event_interruptible_locked_irq(stm->work_wq, + !(stm->pending_work & work))) {} spin_unlock_irqrestore(&stm->work_wq.lock, flags); mutex_unlock(&stm->mtx); return cmd->ret; |