From 52645059af815930913e79c4faa490d97e742003 Mon Sep 17 00:00:00 2001 From: Taha HAMDI Date: Wed, 5 Apr 2023 09:55:13 +0200 Subject: 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 --- kernel/drivers/net/ieee802154/dw3000_chip_e0.c | 5 ++--- kernel/drivers/net/ieee802154/dw3000_core.c | 7 +++++++ kernel/drivers/net/ieee802154/dw3000_spi.c | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) 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 @@ static int dw3000_e0_check_tx_ok(struct dw3000 *dw) */ 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 @@ static int dw3000_setdwstate(struct dw3000 *dw, enum operational_state state) * - 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 @@ static int dw3000_spi_probe(struct spi_device *spi) 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 */ -- cgit v1.2.3