Skip to content

Commit 787af62

Browse files
committed
iio: adc: adrv902x: Add tracking config
Add tracking configuration settings. Signed-off-by: George Mois <[email protected]>
1 parent 9057e9e commit 787af62

File tree

2 files changed

+93
-0
lines changed

2 files changed

+93
-0
lines changed

drivers/iio/adc/adrv902x/adrv9025.c

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ enum adrv9025_iio_dev_attr {
4747
ADRV9025_CAL_MASK,
4848
ADRV9025_DPD_TX_MASK,
4949
ADRV9025_DPD_RESET,
50+
ADRV9025_DPD_CONFIG_SET,
5051
adrv9025_JESD204_FSM_ERROR,
5152
adrv9025_JESD204_FSM_PAUSED,
5253
adrv9025_JESD204_FSM_STATE,
@@ -398,6 +399,20 @@ static ssize_t adrv9025_phy_store(struct device *dev,
398399
ret = adrv9025_dev_err(phy);
399400
}
400401
break;
402+
case ADRV9025_DPD_CONFIG_SET:
403+
ret = kstrtobool(buf, &enable);
404+
if (ret)
405+
break;
406+
407+
phy->dpdTrackingConfig->txChannelMask = phy->dpdTxChannel;
408+
409+
if (enable) {
410+
ret = adi_adrv9025_DpdTrackingConfigSet(phy->madDevice,
411+
phy->dpdTrackingConfig);
412+
if (ret)
413+
ret = adrv9025_dev_err(phy);
414+
}
415+
break;
401416
case adrv9025_JESD204_FSM_RESUME:
402417
if (!phy->jdev) {
403418
ret = -ENOTSUPP;
@@ -589,6 +604,9 @@ static IIO_DEVICE_ATTR(dpd_tx_mask, 0644, adrv9025_phy_show,
589604
static IIO_DEVICE_ATTR(dpd_reset, 0200, NULL,
590605
adrv9025_phy_store, ADRV9025_DPD_RESET);
591606

607+
static IIO_DEVICE_ATTR(dpd_tracking_config_set, 0200, NULL,
608+
adrv9025_phy_store, ADRV9025_DPD_CONFIG_SET);
609+
592610
static IIO_DEVICE_ATTR(jesd204_fsm_error, 0444,
593611
adrv9025_phy_show,
594612
NULL,
@@ -624,6 +642,7 @@ static struct attribute *adrv9025_phy_attributes[] = {
624642
&iio_dev_attr_calibrate_mask.dev_attr.attr,
625643
&iio_dev_attr_dpd_tx_mask.dev_attr.attr,
626644
&iio_dev_attr_dpd_reset.dev_attr.attr,
645+
&iio_dev_attr_dpd_tracking_config_set.dev_attr.attr,
627646
&iio_dev_attr_jesd204_fsm_error.dev_attr.attr,
628647
&iio_dev_attr_jesd204_fsm_state.dev_attr.attr,
629648
&iio_dev_attr_jesd204_fsm_paused.dev_attr.attr,
@@ -2952,6 +2971,72 @@ static int adrv9025_phy_parse_agc_dt(struct iio_dev *iodev, struct device *dev)
29522971
&phy->agcConfig->agcSlowloopFastGainChangeBlockEnable, 0, 0, 1);
29532972
}
29542973

2974+
static int adrv9025_phy_parse_dpd_config_dt(struct iio_dev *iodev, struct device *dev)
2975+
{
2976+
struct adrv9025_rf_phy *phy = iio_priv(iodev);
2977+
struct device_node *np = dev->of_node;
2978+
int ret;
2979+
2980+
ret = ADRV9025_OF_PROP("adi,dpd-indirect-regularization-value",
2981+
&phy->dpdTrackingConfig->dpdIndirectRegularizationValue, 20, 0, 63);
2982+
if (ret)
2983+
return ret;
2984+
2985+
ret = ADRV9025_OF_PROP("adi,dpd-direct-regularization-value",
2986+
&phy->dpdTrackingConfig->dpdDirectRegularizationValue, 35, 0, 63);
2987+
if (ret)
2988+
return ret;
2989+
2990+
ret = ADRV9025_OF_PROP("adi,dpd-samples",
2991+
&phy->dpdTrackingConfig->dpdSamples, 16384, 4096, 61440);
2992+
if (ret)
2993+
return ret;
2994+
2995+
ret = ADRV9025_OF_PROP("adi,dpd-m-threshold",
2996+
&phy->dpdTrackingConfig->dpdMThreshold, 2920, 0, 32767);
2997+
if (ret)
2998+
return ret;
2999+
3000+
ret = ADRV9025_OF_PROP("adi,dpd-peak-search-window-size",
3001+
&phy->dpdTrackingConfig->dpdPeakSearchWindowSize, 65535, 0, 16777215);
3002+
if (ret)
3003+
return ret;
3004+
3005+
ret = ADRV9025_OF_PROP("adi,dpd-update-mode",
3006+
&phy->dpdTrackingConfig->dpdUpdateMode, 0, 0, 2);
3007+
if (ret)
3008+
return ret;
3009+
3010+
ret = ADRV9025_OF_PROP("adi,dpd-min-avg-signal-level",
3011+
&phy->dpdTrackingConfig->minAvgSignalLevel, 519, 0, 65535);
3012+
if (ret)
3013+
return ret;
3014+
3015+
ret = ADRV9025_OF_PROP("adi,dpd-mu",
3016+
&phy->dpdTrackingConfig->dpdMu, 50, 0, 100);
3017+
if (ret)
3018+
return ret;
3019+
3020+
ret = ADRV9025_OF_PROP("adi,dpd-min-avg-signal-level-orx",
3021+
&phy->dpdTrackingConfig->minAvgSignalLevelOrx, 519, 0, 65535);
3022+
if (ret)
3023+
return ret;
3024+
3025+
ret = ADRV9025_OF_PROP("adi,dpd-filter-sel",
3026+
&phy->dpdTrackingConfig->dpdFilterSel, 0, 0, 1);
3027+
if (ret)
3028+
return ret;
3029+
3030+
ret = ADRV9025_OF_PROP("adi,dpd-enable-direct-learning",
3031+
&phy->dpdTrackingConfig->enableDirectLearning, 0, 0, 1);
3032+
if (ret)
3033+
return ret;
3034+
3035+
return ADRV9025_OF_PROP("adi,dpd-indirect-regularization-low-power-value",
3036+
&phy->dpdTrackingConfig->dpdIndirectRegularizationLowPowerValue,
3037+
20, 0, 63);
3038+
}
3039+
29553040
static int adrv9025_parse_dpd_coef(struct adrv9025_rf_phy *phy, char *data, u32 size)
29563041
{
29573042
u8 dpdNumFeatures = 0, i, j, k, lut;
@@ -3057,12 +3142,19 @@ static int adrv9025_probe(struct spi_device *spi)
30573142
phy->dpdModelConfig = kzalloc(sizeof(adi_adrv9025_DpdModelConfig_v2_t), GFP_KERNEL);
30583143
if (!(phy->dpdModelConfig))
30593144
return -ENOMEM;
3145+
phy->dpdTrackingConfig = kzalloc(sizeof(adi_adrv9025_DpdTrackingConfig_t), GFP_KERNEL);
3146+
if (!(phy->dpdTrackingConfig))
3147+
return -ENOMEM;
30603148
mutex_init(&phy->lock);
30613149

30623150
ret = adrv9025_phy_parse_agc_dt(indio_dev, &spi->dev);
30633151
if (ret)
30643152
return ret;
30653153

3154+
ret = adrv9025_phy_parse_dpd_config_dt(indio_dev, &spi->dev);
3155+
if (ret)
3156+
return ret;
3157+
30663158
priv = jesd204_dev_priv(jdev);
30673159
priv->phy = phy;
30683160

drivers/iio/adc/adrv902x/adrv9025.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ struct adrv9025_rf_phy {
171171
struct bin_attribute bin;
172172
adi_adrv9025_DpdModelConfig_v2_t *dpdModelConfig;
173173
adi_adrv9025_TxChannels_e dpdTxChannel;
174+
adi_adrv9025_DpdTrackingConfig_t *dpdTrackingConfig;
174175
};
175176

176177
int adrv9025_hdl_loopback(struct adrv9025_rf_phy *phy, bool enable);

0 commit comments

Comments
 (0)