dw3000: fix interop issue on ch9 ds
- clear DW3000_RUNSAR bit from DW3000_AON_DIG_CFG before ds
- kick PGF Calibration before ds
- kick ldo tune and bias calib from otp instead of using otp values
Bug: 271935112
Change-Id: I23e2667a28e5e7996a98bfddc7fb2234b4208583
Signed-off-by: Taha HAMDI <taha.hamdi@qorvo.com>
diff --git a/kernel/drivers/net/ieee802154/dw3000_chip_e0.c b/kernel/drivers/net/ieee802154/dw3000_chip_e0.c
index 1605bf0..f4158be 100644
--- a/kernel/drivers/net/ieee802154/dw3000_chip_e0.c
+++ b/kernel/drivers/net/ieee802154/dw3000_chip_e0.c
@@ -212,11 +212,10 @@
*/
int dw3000_e0_prog_ldo_and_bias_tune(struct dw3000 *dw)
{
- const u16 bias_mask = DW3000_BIAS_CTRL_DIG_BIAS_DAC_ULV_BIT_MASK;
struct dw3000_local_data *local = &dw->data;
struct dw3000_otp_data *otp = &dw->otp_data;
- u16 bias_tune = (otp->bias_tune >> 16) & bias_mask;
- if (otp->ldo_tune_lo && otp->ldo_tune_hi && bias_tune) {
+
+ if (otp->ldo_tune_lo && otp->ldo_tune_hi && otp->bias_tune) {
dw3000_reg_or16(dw, DW3000_NVM_CFG_ID, 0, DW3000_LDO_BIAS_KICK);
/* Save the kicks for the on-wake configuration */
local->sleep_mode |= DW3000_LOADLDO | DW3000_LOADBIAS;
diff --git a/kernel/drivers/net/ieee802154/dw3000_core.c b/kernel/drivers/net/ieee802154/dw3000_core.c
index 7772f16..36e61d5 100644
--- a/kernel/drivers/net/ieee802154/dw3000_core.c
+++ b/kernel/drivers/net/ieee802154/dw3000_core.c
@@ -4608,6 +4608,13 @@
* - enable configuration copy from AON memory to host registers.
* - set ONW_GO2IDLE to get DW3000_OP_STATE_IDLE_PLL on wakeup.
*/
+ /* Step 1.1
+ * - clear DW3000_RUNSAR bit from DW3000_AON_DIG_CFG_ID
+ * - turn off auto PGF cal on wake up
+ */
+ dw->data.sleep_mode &= ~DW3000_RUNSAR;
+ dw->data.sleep_mode |= DW3000_PGFCAL;
+
rc = dw3000_reg_write16(
dw, DW3000_AON_DIG_CFG_ID, 0,
dw->data.sleep_mode |
diff --git a/kernel/drivers/net/ieee802154/dw3000_spi.c b/kernel/drivers/net/ieee802154/dw3000_spi.c
index d710868..76f1f3f 100644
--- a/kernel/drivers/net/ieee802154/dw3000_spi.c
+++ b/kernel/drivers/net/ieee802154/dw3000_spi.c
@@ -116,7 +116,7 @@
hrtimer_init(&dw->idle_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
dw->idle_timer.function = dw3000_idle_timeout;
- dev_info(dw->dev, "Loading driver...");
+ dev_info(dw->dev, "Loading driver...050423");
dw3000_sysfs_init(dw);
/* Setup SPI parameters */