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 */